【问题标题】:Cmake add_custom_command misunderstandingCmake add_custom_command 误解
【发布时间】:2018-01-31 12:24:08
【问题描述】:

我正在学习 CMake 并努力学习:add_custom_command 函数。 如果这是一个基本问题,我很抱歉,但在线文档对我没有多大帮助。

对于这个sn-p:

add_executable (creator creator.cpp)
get_target_property (creator EXE_LOC LOCATION) # get creator.cpp location

add_custom_command(
    OUTPUT ./created.cpp  # creates 'created.cpp' at the specified path
    DEPENDS creator       # specifies files on which the command depends
    COMMAND ${EXE_LOC}    # executes this command 
    ARGS ./created.cpp
)

add_executable(FOO ./created.c)

我可以直观地意识到那里发生了什么,但是,我不明白为什么需要 add_custom_command 正文中的每条指令。这是我的理解(请纠正我的错误):

  • 使用 creator.cpp 在当前工作目录中创建可执行创建者
  • EXE_LOC变量用于存放创建的可执行文件的路径
  • add_custom_command:

    • OUTPUT 指定将在当前创建一个created.cpp 文件 工作目录。
    • DEPENDS:指定这个新创建的 .cpp 文件依赖于 以前创建的可执行文件。但是为什么我们需要指定这个呢?是吗 必须这样做,如果不是,如果我不指定会发生什么
    • COMMAND: ${EXE_LOC}: 这个我不明白。我假设当脚本 到达这一点,将执行某种命令。但究竟要在这里执行什么? ./creator 也许?该文档指定:

      如果 COMMAND 指定一个可执行目标(由 ADD_EXECUTABLE 创建),它将自动替换为构建时创建的可执行文件的位置。

但我真的不明白。

  • ARGS:我不明白这应该做什么以及我们为什么需要它。 我们将新创建的文件作为参数传递给旨在创建该特定文件的命令,这真的让我感到困惑。 如果可能,请帮我清除。

感谢您阅读我的长文。

【问题讨论】:

    标签: shell makefile cmake


    【解决方案1】:

    COMMAND 选项视为命令行是很方便的:

    首先,您需要输入要执行的程序的路径。在给定的情况下,它是creator 可执行文件的路径。然后,您键入给定命令的参数。在给定的情况下,唯一的参数是created.cpp 文件的路径。这就是将要执行的内容:

    <path-to-creator-executable> <path-to-cpp-file>
    

    选项

    DEPENDS creator
    

    在给定的情况下,add_custom_command 的 CMake 文档完美描述:

    如果DEPENDS 指定任何目标(由add_custom_target()add_executable()add_library() 命令创建),则会创建目标级别的依赖项,以确保在使用此自定义命令的任何目标之前构建目标。此外,如果目标是可执行文件或库,则会创建文件级依赖项,以便在重新编译目标时重新运行自定义命令。

    简而言之,这意味着在creator 可执行文件将按照COMMAND 选项中的指定运行之前,将根据需要创建和更新可执行文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多