[英]Do I always need a target in CMake?
我有一个 python 脚本,它为我生成一些文件,在我的脚本中,我有一个参数--outputdir
来指定 output 文件的位置。 我想运行这个脚本来生成这些文件并在以后安装它们。 我用了
add_custom_command(
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
所以 output 文件是在${CMAKE_CURRENT_BINARY_DIR}
下生成的,我可以稍后安装它们。
但上面的代码不起作用,因为我必须使用错误消息中的TARGET
或OUTPUT
。 所以如果我使用一个虚拟的:
add_custom_target(dummy ALL)
add_custom_command(
TARGET dummy
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
这刚刚奏效,我可以看到文件是在${CMAKE_CURRENT_BINARY_DIR}
下生成的。 我相信如果我使用类似的东西:
add_custom_target(dummy
COMMAND python3.6 ${CMAKE_CURRENT_SOURCE_DIR}/generateFiles.py
ARGS --outputdir ${CMAKE_CURRENT_BINARY_DIR})
这也应该有效。 我的问题是为什么我仍然需要一个dummy
目标? 实际上,只需使用COMMAND
我就可以运行我的脚本,使用 args 我可以指定 output 文件的生成位置,然后使用一些安装命令我可以安装文件。 那么在这种情况下使用dummy
目标是否正确,我必须使用它吗? 注意generateFiles.py
在构建过程中不会更改,并且每次都会生成相同的文件。 谢谢,我是 CMake 的新手。
在项目构建期间执行的所有操作都是作为某个目标的一部分执行的。
这是 CMake 的概念,它与许多构建工具的概念相关:Make、Ninja、MSVC 等。因为 CMake 实际上将构建项目的工作委托给其中一个构建工具,所以概念的相似性非常重要。
所以是的,当你想在构建过程中声明一些要执行的命令时,你需要将此命令添加到某个目标:
add_custom_target
创建新目标add_custom_command(TARGET)
将 COMMAND 附加到指定的目标add_custom_command(OUTPUT)
将命令附加到目标,这取决于 OUTPUT 子句中给出的文件。 请注意,虽然 CMake 具有默认执行的all
目标的概念(当未指定目标时),但它不允许将命令直接附加到该目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.