【问题标题】:cmake add_custom_command is aways out of datecmake add_custom_command 已经过时了
【发布时间】:2011-12-20 13:14:46
【问题描述】:

我的问题是 add_custom_command 总是过时,因此在每次构建时都会运行。自定义命令运行一个工具,该工具是同一项目的目标,以生成另一个目标使用的文件:

add_executable(GeneratorTool main.cpp)

add_custom_command(
    OUTPUT generated.h
    COMMAND GeneratorTool
    DEPENDS main.cpp
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "** GeneratorTool **"
)

add_library(MyLib STATIC generated.h ...)

在构建输出 (visual studio 2010) 中,我总是看到 ** GeneratorTool **。我希望它一旦 generate.h 存在并且比 main.cpp 更新就不会再次构建。 有什么想法吗?

谢谢, 乔辰

【问题讨论】:

    标签: cmake cmake-custom-command


    【解决方案1】:

    首先,您可以将 DEPENDS 放在您的 add_custom_command 中的 GeneratorTool 上,而不是 main.cppGeneratorTool 已经依赖于 main.cpp

    那么很可能是 generated.h 的位置不明确,它会强制重新生成 generated.h。

    确保 MyLib 在正确的位置查找 generated.h

    我的盲目猜测是尝试:

    add_library(MyLib STATIC ${CMAKE_CURRENT_SOURCE_DIR}/generated.h ...)
    

    【讨论】:

    • 可能还需要 add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/generated.h ...)
    • 万一有人偶然发现:永远不要将生成的东西输出到源代码树中,始终使用构建树,可以通过${CMAKE_BINARY_DIR}${CMAKE_CURRENT_BINARY_DIR}引用。
    【解决方案2】:

    另一件事可能是 - 确保该命令正在生成 all OUTPUT 文件。如果您的生成器甚至无法生成其中一个,它每次都会运行(这是我的问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多