【发布时间】:2020-03-07 07:53:33
【问题描述】:
我正在将我当前的 Makefile 项目迁移到 CMake,当一个规则可以按给定顺序执行多个规则时,我无法从 Makefile 实现类似的效果。假设我有四个规则:
- 全部
- 准备
- 程序
- 锁
有时我想分别运行它们中的每一个,但我还想有另一个规则称为:release,它只是按特定顺序执行所有四个规则。这在 Makefile 中是微不足道的:
release: all prepare program lock
我曾在 CMake 中使用过 add_custom_target,我想出了以下内容:
add_custom_target(prepare
COMMAND ...)
add_custom_target(program
COMMAND ...)
add_custom_target(lock
COMMAND ...)
add_custom_target(release DEPENDS ${TARGET} prepare program lock)
我希望 CMake 按顺序遍历依赖项,因此它应该构建我的目标,然后运行这三个附加目标。但是,它完全随机地运行它们。我知道创建add_dependencies 命令链的可能性,但这很难看,而且我也不想在独立目标之间创建不需要的依赖关系。
如何按顺序运行依赖项或至少通过一个命令执行我的自定义目标?
【问题讨论】:
-
如果它们不相互依赖,为什么要它们按顺序运行?
-
它们不依赖于项目或文件,但是,例如,如果我运行
lock,那么我就不能再运行program规则了。然而有时我想手动运行lock,以进行测试。我曾经调用make lock,这很好。 -
可以使用例如构建自定义目标。
cmake --build . --target prepare. -
我不明白。在 makefile 中
release: all prepare program lock也会并行运行它们。 -
@KamilCuk 这是一个例外,因为您手动告诉可以同时运行多少个作业。