cmake - 使用 CMake 运行自定义 shell 脚本

标签 cmake

我有以下目录结构:

/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_commandCMakeLists.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 的参数。 (例如 ALLCOMMENT )因为它适合您。

关于cmake - 使用 CMake 运行自定义 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960173/

相关文章:

path - CMake-CPack软件包安装路径的噩梦

windows - Eclipse、cmake、Windows、MingW - 什么 Makefile 生成器?

python - 输出相同时不覆盖文件的简单方法

gradle - 错误 Gradle 同步失败 : Failed to find CMake

c++ - CMake Find_Package(PythonLibs): Does CMake give a preference to dynamic or static libraries?

c++ - nvcc 致命 : Value 'sm_13' is not defined for option 'gpu-architecture'

makefile - 如何修改安装路径而不再次运行配置脚本/cmake

python - libcurl ubuntu python 中不支持或禁用协议(protocol) "https"

c++ - 在 CLion 中使用 GLib

c++ - 使用/usr/lib/i386-linux-gnu 而不是/usr/lib/x86_64-linux-gnu 在 CMake 中查找库