使用CMake运行自定义shell脚本

Mar*_*o90 9 cmake

我有以下目录结构:

/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_commandCMakeLists.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),因为它适合你.