2016-06-28 11 views
2

を生成したい時定数をコンパイルします。他の質問へのfirst answerは私をかなり近づけます。私のCMakeLists.txtから:CMakeにターゲットフォニーを宣言させてください

add_library(${PROJECT_NAME} STATIC ${CXX_SRCS} compile_time.hpp) 
add_custom_command(OUTPUT compile_time.hpp 
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/compile_time.cmake) 

これは私がmakeなくcmakeを実行すると、変数の値が定義されているように、私はmakeを初めて実行するが、それは、compile_time.hppを生成するという意味で動作します。しかしcompile_time.hppは、make、またはcmakeを再実行してメイクファイルをやり直すと再作成されません。

compile_time.cppにはphonyというマークを付けると、それはいつも再作成されますか?試しました

add_custom_target(compile_time.hpp) 

効果なし。

答えて

3

add_custom_targetなしDEPENDSオプションは「偽」ターゲットを作成します。

add_custom_target(compile_time 
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/compile_time.cmake 
) 
# Because we use *target-level* dependency, there is no needs in specifying 
# header file for 'add_library()' call. 
add_library(${PROJECT_NAME} STATIC ${CXX_SRCS}) 
add_dependencies(${PROJECT_NAME} compile_time) 

ヘッダからのライブラリの依存関係compile_time.hはヘッダスキャンによって自動的に検出されますについては、いくつかのターゲットは一つの「偽」から依存して作る、add_dependencies()コールを使用しています。スクリプトcompile_time.cmakeはこのヘッダーを無条件で更新するため、ライブラリは毎回再構築されます。

関連する問題