1

我在我的 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没有更改。

为什么会这样?

注意:这个问题是相关的。

4

1 回答 1

1

自定义目标始终被视为已过期,因此其命令始终运行。但是,这并没有扩展到它的依赖项:

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"
)

您应该将自定义目标视为.PHONYMake 中的规则......它可以帮助您对事物进行排序或提供特殊实用程序作为构建规则(不是“构建”的一部分ALL

于 2021-10-26T19:37:12.733 回答