CMake,如何将文件添加到尚未创建的可执行目标

时间:2018-01-24 18:19:53

标签: makefile compilation cmake

假设有一个可执行目标,并且其中一些附加的头文件丢失了。

那些缺少的标题是由某些脚本自动生成的。

因此,为了确保脚本在可执行目标之前运行,创建一个运行此脚本并作为可执行目标依赖项的专用目标是合理的。

因此,每次运行可执行目标时,丢失的文件都将可用,因为add_executable期望所有文件都可用。

但是,尝试以下列方式执行此操作导致无法找到丢失的文件...

add_custom_target(create_a_header)
add_custom_command(TARGET create_a_header POST_BUILD COMMAND /bin/sh create_a_header.sh )

set(SOURCE_FILES a.h a.c)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
add_dependency(${PROJECT_NAME} create_a_header) 

是否还有其他选项可以将文件添加到可执行文件中,即使它们仍然不可用?

1 个答案:

答案 0 :(得分:2)

CMake可以直接处理位于同一CMakeLists.txt的{​​{3}}输出。

  

在同一目录(CMakeLists.txt文件)中创建的目标(指定自定义命令的任何输出作为源文件)被赋予规则,以便在构建时使用命令生成文件。

所以你的代码应该是这样的:

include(FindUnixCommands)

add_custom_command(
    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/a.h"
    COMMAND ${BASH} "${CMAKE_CURRENT_SOURCE_DIR}/create_a_header.sh" 
)

set(
    SOURCE_FILES 
        "a.c"
        "${CMAKE_CURRENT_BINARY_DIR}/a.h"
)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")