我有一个小型图书馆,为每个版本收集SCM信息。它有两个目标:
generate_scmversion_inc
在每个构建上运行脚本的自定义目标,生成包含SCM信息(标签,日期,时间等)的scmversion.inc文件。scmversion
编译SCMVersion.cpp。这个cpp文件包含scmversion.inc。 在我想要的每个构建上,按顺序:
为实现这一目标,我声明scmversion
依赖于generate_scmversion_inc
:
add_dependencies(scmversion generate_scmversion_inc)
结果:
generate_scmversion_inc
按预期运行每个构建。但scmversion
奇怪的是,只有每隔一次。有人可以告诉我这里我做错了吗?
我正在使用CMake 3.4.3和build system ninja 1.6.0
代码作为参考:
project(scmversion)
set (SOURCES
src/ndd/SCMVersion.cpp)
add_library(${PROJECT_NAME} ${SOURCES})
add_custom_target(generate_scmversion_inc ALL
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(scmversion generate_scmversion)
答案 0 :(得分:0)
我按照预期的方式工作:
alwaysbuild
。add_custom_command
并在每次构建时运行BYPRODUCTS
选项。alwaysbuild
作为依赖项添加到项目本身。在代码中:
add_custom_target(alwaysbuild ALL)
add_custom_command(TARGET alwaysbuild
BYPRODUCTS ${PROJECT_BINARY_DIR}/scmversion.inc
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(${PROJECT_NAME} alwaysbuild)