Build 在CMake中,如何按顺序运行依赖项或目标?

Build 在CMake中,如何按顺序运行依赖项或目标?,build,cmake,Build,Cmake,我正在将当前的Makefile项目迁移到CMake,当一个规则可以按给定顺序执行多个规则时,我无法从Makefile获得类似的效果。假设我有四条规则: 全部 预备 节目 锁 有时我想分别运行它们,但我也希望有另一个名为:release的规则,它只是按照特定的顺序执行所有四个规则。在Makefile中,这很简单: release: all prepare program lock 我在CMake中使用了add_custom_target,我得出了以下结论: add_custom_target(p

我正在将当前的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
    命令,但这很难看,我也不想在独立目标之间创建不需要的依赖关系


    如何按顺序运行依赖项或至少通过一个命令执行自定义目标?

    在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来构建自定义目标--目标准备
    。我不明白。在makefile
    release中:所有prepare-program-lock
    也将并行运行它们。@KamilCuk这是一个例外,因为您可以手动告知可以同时运行多少个作业。如果它们彼此不依赖,为什么要按顺序运行?它们在项目或文件方面不依赖,但是,例如,如果我运行
    lock
    ,那么我就不能再运行
    程序
    规则了。但有时我想手动运行
    lock
    ,以进行测试。我曾经调用
    makelock
    ,这很好。可以使用
    cmake--build来构建自定义目标--目标准备
    。我不明白。在makefile
    release中:所有准备程序锁也将并行运行。@KamilCuk这是一个例外,因为您可以手动告诉有多少个作业可以同时运行。