我有以下目录结构:
/CMakeLists.txt
/component-a/CMakeLists.txt
/...
/component-b/CMakeLists.txt
/...
/doc/CMakeLists.txt
/create-doc.sh
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}/)
不幸的是,命令永远不会运行。
我也试过execute_process
:
execute_process ( COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create-doc.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ )
现在脚本在配置阶段执行,但不在构建时执行。
答案 0 :(得分:9)
你几乎在add_custom_command
。这确实是告诉CMake如何生成文件的正确方法。但是,当某些东西依赖于该文件时,CMake只会运行它。
在您的情况下,如果文件本身是最终产品并且后续构建步骤不再使用,通常的方法是创建自定义目标来驱动相关的自定义命令:
add_custom_target(
BuildDocs ALL
DEPENDS doc.pdf
)
这个(自定义命令的自定义目标驱动程序)是CMake中非常常见的习惯用法。
您当然可以使用适合您的add_custom_target
(例如ALL
,COMMENT
)参数。