add_custom_target并不总是重新运行

时间:2019-02-06 16:05:14

标签: cmake

第一个目标始终会重新运行:

add_custom_target(testcmake1 COMMAND ${CMAKE_COMMAND} -E echo "Running testcmake1 step 1")
add_custom_command(TARGET testcmake1 COMMAND ${CMAKE_COMMAND} -E echo "Running testcmake1 step 2")

输出为:

1>Running testcmake1 step 1
1>Running testcmake1 step 2

但是,此目标在首次运行时会产生相同的结果,但是随后的任何构建都不输出:

add_custom_target(testcmake2)
add_custom_command(TARGET testcmake2 COMMAND ${CMAKE_COMMAND} -E echo "Running testcmake2 step 1")
add_custom_command(TARGET testcmake2 COMMAND ${CMAKE_COMMAND} -E echo "Running testcmake2 step 2")

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

在第二种情况下,将创建一个没有输出的空目标。要从Visual Studio 2017 GUI运行它,您需要右键单击目标并选择“仅项目”链接目标。

在第一种情况下,它不是一个空目标。要从GUI运行它,选择仅项目构建目标就足够了。

从命令行运行时,它会直接调用MSBuild.exe,因此它将按预期工作。

它确实暴露了add_custom_target(testcmake2 ALL)的错误,因为在构建ALL目标时它从未运行。