如果输出文件存在,CMake add_custom_command无效

时间:2018-06-20 15:33:07

标签: cmake

我需要从txt基本文件生成几个文件。但是,如果这些文件已经存在,则NMake Makefiles生成器将忽略生成命令:

CMakeLists.txt:

add_custom_command(OUTPUT "FILE.FI" "FILE.h"
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../../Tools/GEN.exe
                   DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/FILE.txt"
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

没有生成的文件

文件系统:

FILE.txt

build.make

...
D:\Path\To\Project\..\..\Tools\GEN.exe 
...

存在生成的文件

但是如果FILE.FIFILE.h存在:

文件系统:

FILE.txt
FILE.FI
FILE.h

build.make:

...

所以,我的问题是:如何强制CMake更新现有文件?

PS 。我尝试添加

file(REMOVE "FILE.FI" "FILE.h")

至CMakeLists.txt。它可以工作,但看起来像黑客。

1 个答案:

答案 0 :(得分:0)

缺少注释add_custom_target中的内容。正确设置DEPENDS,它将仅在依赖关系更改时重新运行。它有点棘手且难以记住,因此我总是参考此example。还要检查那里的评论