为什么 add_custom_target 总是被认为是过时的?

mag*_*nus 8 cmake

根据文档add_custom_target()创建一个“始终被认为过时”的目标。然而,文档还说可以add_dependencies()在顶级目标之间添加依赖关系,包括add_custom_target(). 如果add_custom_target()总是被执行,那么将它与 一起使用有什么实际目的吗add_dependencies()

Com*_*sMS 5

就 CMake 而言,add_custom_target不会生成任何可以跟踪的内容来确定目标是否已过时。

与 对比add_custom_command,您可以指定OUTPUT命令生成的结果。据 CMake 所知,自定义目标只是一个黑匣子,任何事情都可能发生。这就是为什么它们很难正确集成到构建中。

请注意,默认情况下,自定义目标将被完全跳过,您只能显式构建它们(例如通过调用make <my_target_name>)。您可以通过ALL在调用时指定选项来使它们成为默认构建目标的一部分add_custom_target,或者根据您的自定义目标创建另一个目标(该目标已经是默认构建目标的一部分)。

您通常无法通过依赖其输出工件之一来添加此依赖项,因为就 CMake 而言,自定义目标不会生成任何内容。这就是为什么你必须使用更古老的东西add_dependencies


Tsy*_*rev 2

如果add_custom_target()总是被执行,那么将它与 一起使用有什么实际目的吗add_dependencies()

  1. 如果没有ALL选项,add_custom_target()则不会自动构建。
  2. 调用add_dependencies(A B)确保目标将在目标之前B构建,因此目标可以安全地使用为目标创建的文件。AAB