CMake的:如何一切之前运行add_custom_command(CMake: How to ru

2019-08-22 08:15发布

我有一个自定义命令

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文件。

然而PRE_BUILD只支持VS2010这意味着config.h是连接前建立。

我怎么做一个自定义命令的CMake开始编译源代码之前。

Answer 1:

您应该使用add_custom_target来代替,而add_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



Answer 2:

Usualy建立是基于makefile文件系统并不需要提报头为目标的一部分。 进一步,添加头到目标被认为是一个反模式。 但是,产生头是一个例外。

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

你应该设置你的${CMAKE_CURRENT_BINARY_DIR}/config.h其他一些compilled目标的一部分。 例如:

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



文章来源: CMake: How to run a add_custom_command before everything else
标签: cmake