Cmake add_custom_command误解

时间:2018-01-31 12:24:08

标签: shell makefile cmake

我正在学习CMake并努力学习:add_custom_command功能。 对不起,如果这是一个基本问题,但在线文档对我没什么帮助。

对于此代码段:

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:我不明白这应该做什么,为什么我们需要它。  我真的很困惑我将新创建的文件作为参数传递给一个命令,其目的是创建该特定文件。 如果可能,请为我清楚。

感谢您阅读我的长篇文章。

1 个答案:

答案 0 :(得分:0)

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()命令创建),则会创建目标级依赖关系以确保构建目标在使用此自定义命令的任何目标之前此外,如果目标是可执行文件或库,则会创建文件级依赖项,以便在重新编译目标时使自定义命令重新运行。

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