Build 在CMake中,如何按顺序运行依赖项或目标?
我正在将当前的Makefile项目迁移到CMake,当一个规则可以按给定顺序执行多个规则时,我无法从Makefile获得类似的效果。假设我有四条规则:Build 在CMake中,如何按顺序运行依赖项或目标?,build,cmake,Build,Cmake,我正在将当前的Makefile项目迁移到CMake,当一个规则可以按给定顺序执行多个规则时,我无法从Makefile获得类似的效果。假设我有四条规则: 全部 预备 节目 锁 有时我想分别运行它们,但我也希望有另一个名为:release的规则,它只是按照特定的顺序执行所有四个规则。在Makefile中,这很简单: release: all prepare program lock 我在CMake中使用了add_custom_target,我得出了以下结论: add_custom_target(p
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
命令,但这很难看,我也不想在独立目标之间创建不需要的依赖关系
如何按顺序运行依赖项或至少通过一个命令执行自定义目标?在CMake中,自定义目标可以有多个命令。与可并行化的依赖项不同,多个命令是按顺序运行的 从文件(我的重点):
命令
指定生成时要执行的命令行如果更多
指定了多个命令
,它们将按顺序执行,但
不一定组成有状态的shell或批处理脚本。(至)
运行完整脚本,使用configure_file()
命令或
文件(生成)
命令来创建它,然后指定一个命令来创建它
启动它。)
因此,要添加release
目标,可以指定要运行的所有命令:
add_custom_target(release
DEPENDS ${TARGET}
COMMAND ...
COMMAND ...
COMMAND ...
)
在CMake中,自定义目标可以有多个命令。与可并行化的依赖项不同,多个命令是按顺序运行的
从文件(我的重点):
命令
指定生成时要执行的命令行如果更多
指定了多个命令
,它们将按顺序执行,但
不一定组成有状态的shell或批处理脚本。(至)
运行完整脚本,使用configure_file()
命令或
文件(生成)
命令来创建它,然后指定一个命令来创建它
启动它。)
因此,要添加release
目标,可以指定要运行的所有命令:
add_custom_target(release
DEPENDS ${TARGET}
COMMAND ...
COMMAND ...
COMMAND ...
)
如果它们彼此不依赖,为什么要按顺序运行?它们在项目或文件方面不依赖,但是,例如,如果我运行lock
,则无法再运行program
规则。但有时我想手动运行lock
,以进行测试。我曾经调用makelock
,这很好。可以使用cmake--build来构建自定义目标--目标准备
。我不明白。在makefilerelease中:所有prepare-program-lock
也将并行运行它们。@KamilCuk这是一个例外,因为您可以手动告知可以同时运行多少个作业。如果它们彼此不依赖,为什么要按顺序运行?它们在项目或文件方面不依赖,但是,例如,如果我运行lock
,那么我就不能再运行程序
规则了。但有时我想手动运行lock
,以进行测试。我曾经调用makelock
,这很好。可以使用cmake--build来构建自定义目标--目标准备
。我不明白。在makefilerelease中:所有准备程序锁也将并行运行。@KamilCuk这是一个例外,因为您可以手动告诉有多少个作业可以同时运行。