Makefile CMake,如何将文件添加到尚未';还没有创建

Makefile CMake,如何将文件添加到尚未';还没有创建,makefile,compilation,cmake,Makefile,Compilation,Cmake,假设有一个可执行目标,它的一些附加头文件丢失了 那些缺少的标题是由某些脚本自动生成的 因此,为了确保脚本在可执行目标之前运行,合理的做法是创建一个专用目标来运行该脚本,并作为可执行目标的依赖项 因此,每次可执行目标运行时,丢失的文件都将可用,因为add\u executable希望所有文件都可用 但是,尝试以以下方式执行此操作会导致找不到丢失的文件 add_custom_target(create_a_header) add_custom_command(TARGET create_a_head

假设有一个可执行目标,它的一些附加头文件丢失了

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

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

因此,每次可执行目标运行时,丢失的文件都将可用,因为
add\u 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) 

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

CMake可以直接处理驻留在同一
CMakeLists.txt
中的输出

在同一目录(
CMakeLists.txt
文件)中创建的目标(该目标将自定义命令的任何输出指定为源文件)将在生成时使用该命令生成文件

因此,您的代码应该如下所示:

include(findunix命令)
添加自定义命令(
输出“${CMAKE\u CURRENT\u BINARY\u DIR}/a.h”
命令${BASH}“${CMAKE\u CURRENT\u SOURCE\u DIR}/create\u a\u header.sh”
)
设置(
源文件
“交流”
“${CMAKE\u CURRENT\u BINARY\u DIR}/a.h”
)
添加可执行文件(${PROJECT\u NAME}${SOURCE\u FILES})
目标目录(${PROJECT\u NAME}PRIVATE“${CMAKE\u CURRENT\u BINARY\u DIR}”)

CMake可以直接处理驻留在同一
CMakeLists.txt中的输出

在同一目录(
CMakeLists.txt
文件)中创建的目标(该目标将自定义命令的任何输出指定为源文件)将在生成时使用该命令生成文件

因此,您的代码应该如下所示:

include(findunix命令)
添加自定义命令(
输出“${CMAKE\u CURRENT\u BINARY\u DIR}/a.h”
命令${BASH}“${CMAKE\u CURRENT\u SOURCE\u DIR}/create\u a\u header.sh”
)
设置(
源文件
“交流”
“${CMAKE\u CURRENT\u BINARY\u DIR}/a.h”
)
添加可执行文件(${PROJECT\u NAME}${SOURCE\u FILES})
目标目录(${PROJECT\u NAME}PRIVATE“${CMAKE\u CURRENT\u BINARY\u DIR}”)