我被迫在Linux环境中使用旧的cmake版本2.8.12。
作为预构建步骤,我必须将多个头文件从源目录复制到目标目录。我决定使用add_custom_target
子句。如果这本身就是一个坏主意,请告诉我。例如:
add_custom_target( prebuild
COMMENT "Prebuild step: copy other headers"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/../other/include/alpha.h ${CMAKE_SOURCE_DIR}/include/other
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/../other/include/bravo.h ${CMAKE_SOURCE_DIR}/include/other
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/../other/include/charlie.h ${CMAKE_SOURCE_DIR}/include/other
)
add_executable( myapp main.cxx )
# My application depends on the pre-build step.
add_dependencies( myapp prebuild )
set_target_properties( myapp PROPERTIES COMPILE_flaGS "-g" )
install( TARGETS myapp DESTINATION ${BIN_INSTALL_DIR} )
列出每个头文件将很麻烦。我知道如何搜索所有头文件并将它们放在列表变量中。例如。
file( GLOB other_headers "${CMAKE_SOURCE_DIR}/../other/include/*.h" )
但是,如何在add_custom_target
子句中使用该列表变量?
是否可以在add_custom_target
子句中复制多个文件?
作为预构建步骤,是否有更好的方法可以复制多个文件,而这可能是我的应用程序构建的依赖项?
限于旧版本的cmake限制了我的选择。以下是我尝试未成功的事情。
- 如果我的cmake版本为3.5,则
copy_if_different
命令可以采用多个源路径。 - 在
COMMAND_EXPAND_LISTS
子句中添加add_custom_target
无效。在更新的cmake版本中,该功能才可用。 - 在
foreach
子句中使用add_custom_target
循环无效。在我看到的其他示例中,它们始终使用foreach
循环,而add_custom_target
在该循环内。但是,如果我这样做了,那么我将不知道如何将其作为应用程序构建的依赖项。