cmake:目标依赖项问题(add_dependency不起作用?)

时间:2016-05-19 08:46:05

标签: c++ cmake dependencies

我有一个小型图书馆,为每个版本收集SCM信息。它有两个目标:

  1. generate_scmversion_inc在每个构建上运行脚本的自定义目标,生成包含SCM信息(标签,日期,时间等)的scmversion.inc文件。
  2. scmversion编译SCMVersion.cpp。这个cpp文件包含scmversion.inc。
  3. 在我想要的每个构建上,按顺序:

    • 要运行的脚本
    • SCMVersion.cpp重建

    为实现这一目标,我声明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)
    

1 个答案:

答案 0 :(得分:0)

我按照预期的方式工作:

  1. 使用始终构建的自定义目标alwaysbuild
  2. 定义add_custom_command并在每次构建时运行BYPRODUCTS选项。
  3. alwaysbuild作为依赖项添加到项目本身。
  4. 在代码中:

    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)