cmake add_custom_command总是过时的

时间:2011-12-20 13:14:47

标签: cmake

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

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更新,它就不会再次构建。 有什么想法吗?

谢谢, 约亨

2 个答案:

答案 0 :(得分:2)

首先,您可以在DEPENDS而不是add_custom_command上将main.cpp放在GeneratorTool上。 GeneratorTool已取决于main.cpp

然后很可能是generated.h的位置不明确,它会强制重建generated.h。

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

我的盲目猜测是尝试:

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

答案 1 :(得分:1)

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