使用CMake

时间:2016-10-10 14:05:25

标签: 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_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}/ ) 

现在脚本在配置阶段执行,但不在构建时执行。

1 个答案:

答案 0 :(得分:9)

你几乎在add_custom_command。这确实是告诉CMake如何生成文件的正确方法。但是,当某些东西依赖于该文件时,CMake只会运行它。

在您的情况下,如果文件本身是最终产品并且后续构建步骤不再使用,通常的方法是创建自定义目标来驱动相关的自定义命令:

add_custom_target(
  BuildDocs ALL
  DEPENDS doc.pdf
)

这个(自定义命令的自定义目标驱动程序)是CMake中非常常见的习惯用法。

您当然可以使用适合您的add_custom_target(例如ALLCOMMENT)参数。