我有以下目录结构:
/CMakeLists.txt
/component-a/CMakeLists.txt
/...
/component-b/CMakeLists.txt
/...
/doc/CMakeLists.txt
/create-doc.sh
Run Code Online (Sandbox Code Playgroud)
shell脚本create-doc.sh创建文档文件(doc.pdf).如何在构建时使用CMake执行此shell脚本并将文件复制doc.pdf到构建目录?
我通过add_custom_command在CMakeLists.txt目录中的文件中使用来尝试它doc:
add_custom_command ( OUTPUT doc.pdf
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create-doc.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/)
Run Code Online (Sandbox Code Playgroud)
不幸的是,命令永远不会运行.
我也尝试过execute_process:
execute_process ( COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create-doc.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ )
Run Code Online (Sandbox Code Playgroud)
现在脚本在配置阶段执行,但不在构建时执行.
Rei*_*ica 11
你快到了add_custom_command.这确实是告诉CMake如何生成文件的正确方法.但是,CMake只会在某些内容依赖于该文件时运行.
在您的情况下,当文件本身是最终产品并且后续构建步骤不再使用时,通常的方法是创建自定义目标以驱动相关的自定义命令:
add_custom_target(
BuildDocs ALL
DEPENDS doc.pdf
)
Run Code Online (Sandbox Code Playgroud)
这(自定义命令的自定义目标驱动程序)是CMake中非常常见的习惯用法.
当然,你可以玩弄的参数add_custom_target(例如ALL,COMMENT),因为它适合你.