假设有一个可执行目标,并且其中一些附加的头文件丢失了。
那些缺少的标题是由某些脚本自动生成的。
因此,为了确保脚本在可执行目标之前运行,创建一个运行此脚本并作为可执行目标依赖项的专用目标是合理的。
因此,每次运行可执行目标时,丢失的文件都将可用,因为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)
是否还有其他选项可以将文件添加到可执行文件中,即使它们仍然不可用?
答案 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}")