【问题标题】:CMake rebuilts custom target despite no sources having changed [duplicate]尽管没有更改任何来源,但 CMake 会重建自定义目标 [重复]
【发布时间】:2023-03-21 05:33:01
【问题描述】:

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

为什么会这样?

注意:This question 是相关的。

【问题讨论】:

  • 您可能期望选项BYPRODUCTSSOURCES 用于指定依赖项,但它们不是。根据documentationSOURCES 指定文件仅用于 IDE,BYPRODUCTS 仅用于 Ninja 生成器。

标签: cmake build code-generation cmake-custom-command


【解决方案1】:

自定义的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 的一部分) )

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多