我正在学习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
正文的每条指令。这是我理解的方式(请纠正我错误的地方):
EXE_LOC
变量用于存储创建的可执行文件的路径 add_custom_command
:
OUTPUT
指定将在当前创建created.cpp
文件
工作目录。DEPENDS
:指定这个新创建的.cpp文件取决于
先前创建的可执行但为什么我们需要指定这个呢?是吗
必须这样做,如果没有,如果我没有指定这个 COMMAND: ${EXE_LOC}
:我不明白。我假设当脚本
达到这一点,将执行某种命令。但究竟要在这里执行什么呢?可能./creator
?文档指定:
如果COMMAND指定了可执行目标(由ADD_EXECUTABLE创建),它将自动替换为在构建时创建的可执行文件的位置。
但我真的不明白这一点。
ARGS
:我不明白这应该做什么,为什么我们需要它。
我真的很困惑我将新创建的文件作为参数传递给一个命令,其目的是创建该特定文件。
如果可能,请为我清楚。感谢您阅读我的长篇文章。
答案 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
可执行文件之前,将根据需要创建和更新可执行文件。