尽管没有更改源,CMake 仍重建自定义目标
CMake rebuilts custom target despite no sources having changed
我在我的 CMake 文件中使用自定义目标,如下所示:
add_custom_target(generated_bar
COMMAND ${CMAKE_COMMAND} -DOUT=bar -P generate-bar.cmake
BYPRODUCTS bar
COMMENT "Generating bar from foo"
SOURCES foo)
这对我来说很好,并且生成了 bar
。但是,如果我再次 make generated_bar
- bar
会再次生成,即使源文件 foo
没有更改。
为什么会这样?
注:相关。
自定义 target 总是被认为是过时的,所以它的命令总是运行。但是,这不会扩展到它的依赖项:
add_custom_command(
OUTPUT bar
COMMAND ${CMAKE_COMMAND} -DOUT=bar -P generate-bar.cmake
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/generate-bar.cmake" foo
COMMENT "Generating bar from foo"
)
add_custom_target(
generate_bar
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/bar"
)
您应该将自定义目标视为 Make 中的 .PHONY
规则...它可以帮助您对事物进行排序或提供特殊实用程序作为构建规则(不是“构建”的一部分ALL
)
我在我的 CMake 文件中使用自定义目标,如下所示:
add_custom_target(generated_bar
COMMAND ${CMAKE_COMMAND} -DOUT=bar -P generate-bar.cmake
BYPRODUCTS bar
COMMENT "Generating bar from foo"
SOURCES foo)
这对我来说很好,并且生成了 bar
。但是,如果我再次 make generated_bar
- bar
会再次生成,即使源文件 foo
没有更改。
为什么会这样?
注:
自定义 target 总是被认为是过时的,所以它的命令总是运行。但是,这不会扩展到它的依赖项:
add_custom_command(
OUTPUT bar
COMMAND ${CMAKE_COMMAND} -DOUT=bar -P generate-bar.cmake
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/generate-bar.cmake" foo
COMMENT "Generating bar from foo"
)
add_custom_target(
generate_bar
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/bar"
)
您应该将自定义目标视为 Make 中的 .PHONY
规则...它可以帮助您对事物进行排序或提供特殊实用程序作为构建规则(不是“构建”的一部分ALL
)