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

标签 cmake

根据the documentation , add_custom_target()创建一个“始终认为已过期”的目标。但是,文档 also saysadd_dependencies()可以在顶级目标之间添加依赖关系,包括由 add_custom_target() 添加的依赖关系.如果 add_custom_target()总是被执行,将它与 add_dependencies() 一起使用有什么实际目的吗? ?

最佳答案

就 CMake 而言, add_custom_target 不会产生任何它可以跟踪以确定目标是否过期的东西。

对比 add_custom_command ,您可以在其中指定 OUTPUT命令产生的。据 CMake 所知,自定义目标只是一个黑匣子,任何事情都可能发生。这就是使它们难以正确集成到构建中的原因。

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

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

关于cmake - 为什么 add_custom_target 总是被认为是过时的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758263/

相关文章:

qt - 在 CLion 中使用 CMake 构建项目时,QQmlApplicationEngine 不接受正确的 QML

CMAKE - 自定义目标

c++ - 如何在测试运行期间获取资源的目录路径?

c++ - 如何要求Cmake输出googletest详细结果

c++ - Boost cmake 组件索引

c++ - CMake:如何只包含 OpenCV 的一部分?

c++ - 导出 cmake-gui 选项

c++ - 使用 g++ 时 HDF5 的 undefined symbol

android - cmake - 一次针对多个架构,无需在构建之间手动清理

c - target_link_libraries(--wrap) 是如何工作的?