このワークフローでは、モジュールAを複数のヘッダーファイルで構成できますモジュールAバイナリを生成しない(補足:モジュールAからのヘッダーの一部を含む他のモジュールによって明らかに使用されますバイナリを生成します)。
良い例はヘッダーのみのライブラリで、CMake 3はINTERFACE
ライブラリ( this SO answer の概念とCMakeの概念のおかげで優れたサポートを導入しています。 機能のドキュメント )。
モジュールAからインターフェイスライブラリターゲットを作成できます。
add_library(module_A INTERFACE)
これにより、CMakesターゲットのすべての素晴らしい機能が得られます(別のターゲットの依存関係として使用したり、エクスポートしたり、要件を推移的に転送したりすることができます)
ただし、この場合、モジュールAのヘッダーはIDE(Xcodeには表示されませんが、同じであることを期待しています)他のほとんどすべてのIDEで)。
モジュールAを構成するファイルをIDEで編集用に表示する必要があるため、これはワークフローの大きな欠点であることがわかります。それを達成することは可能ですか?
数か月後、INTERFACE
ライブラリのヘッダーファイルを直接一覧表示する方法が見つかりませんでした。
質問にはまだいくつかの見解があるので、ここに私がやったこと(つまり、現在利用可能なより小さなハックのように見えるもの)があります。
想像してみてくださいモジュールAはヘッダーのみのライブラリです。ターゲットを宣言するCMakeLists.txtで:
# Define 'modA_headers' variable to list all the header files
set(modA_headers
utility.h
moreUtilities.h
...)
add_library(moduleA INTERFACE) # 'moduleA' is an INTERFACE pseudo target
#
# From here, the target 'moduleA' can be customised
#
target_include_directories(moduleA ...) # Transitively forwarded
install(TARGETS moduleA ...)
#
# HACK: have the files showing in the IDE, under the name 'moduleA_ide'
#
add_custom_target(moduleA_ide SOURCES ${modA_headers})
CMakeの今後のリリースでは、より意味論的に正しいアプローチが提供されることが期待されるため、この回答は受け入れません。
新しいtarget_sources
CMake 3.1のコマンド。
add_library(moduleA INTERFACE)
target_include_directories(moduleA INTERFACE ...)
target_sources(moduleA INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/utility.h
${CMAKE_CURRENT_SOURCE_DIR}/moreUtilities.h
)
また、推移的です。
http://www.cmake.org/cmake/help/v3.1/command/target_sources.html#command:target_sources
CMake 3.3では、INTERFACE_SOURCESを持つターゲットをエクスポートできないという制限が解除されました。