簡體   English   中英

CMake:如何在其他所有事情之前運行add_custom_command

[英]CMake: How to run a add_custom_command before everything else

我有一個自定義命令

add_custom_command(
    OUTPUT config.h
    PRE_BUILD
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h
)

我試圖在其他所有內容之前運行它,然后生成unix Makefile。

但是,只有VS2010支持PRE_BUILD,這意味着在鏈接之前構建config.h

如何在cmake開始編譯源之前創建自定義命令。

您應該使用add_custom_targetadd_dependencies來使您的正常目標依賴於它:

add_custom_target(
    myCustomTarget
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h
)
add_dependencies(myTarget myCustomTarget)

這應確保在編譯myTarget的源之前運行該命令。

Usualy構建基於makefile的系統不需要提及標題作為目標的一部分。 此外,向目標添加標頭被認為是反模式。 但是生成標頭是此規則的一個例外。

http://voices.canonical.com/jussi.pakkanen/2013/03/26/a-list-of-common-cmake-antipatterns/

您應該將${CMAKE_CURRENT_BINARY_DIR}/config.h為其他一些已編譯目標的一部分。 例如:

set(PROGRAM1_SOURCES main_program1.cpp)
set(PROGRAM1_HEADERS main_program1.h ${CMAKE_CURRENT_BINARY_DIR}/config.h)
add_executable(program1 ${PROGRAM1_SOURCES} ${PROGRAM1_HEADERS})

因此,CMake將知道哪個目標實際上需要生成的config.h並且能夠將生成命令插入到正確的構建步驟中。

另請參閱https://cmake.org/cmake-tutorial/#s5上的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM