我有以下目录结构:
/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}/ )
现在脚本在配置阶段执行,但不在构建阶段执行。
最佳答案
您几乎可以使用 add_custom_command
.这确实是告诉 CMake 如何生成文件的正确方法。但是,CMake 只会在某些内容依赖于该文件时运行它。
在您的情况下,当文件本身是最终产品并且不会被后续构建步骤进一步使用时,通常的方法是创建一个自定义目标来驱动相关的自定义命令:
add_custom_target(
BuildDocs ALL
DEPENDS doc.pdf
)
这(自定义命令的自定义目标驱动程序)是 CMake 中非常常见的习惯用法。
你当然可以玩弄
add_custom_target
的参数。 (例如 ALL
、 COMMENT
)因为它适合您。
关于cmake - 使用 CMake 运行自定义 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960173/