我有一个自定义命令
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开始编译源代码之前。
您应该使用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
。
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