如何使用cmake在源代码中生成标题?

ams*_*mso 6 build-automation cmake

在我的项目中,我有一个"架构"文件和实用程序,我写了生成头文件.我正在使用cmake和源代码构建来构建应用程序.

目前我必须手动重新生成头文件然后构建应用程序.

然后我想出了这个CMakeLists.txt语句,但是它们在构建目录中而不是在源目录中生成头.

configure_file( generator.pl generator COPYONLY )
configure_file( schema.txt.in schema.txt COPYONLY )
add_custom_command(
    OUTPUT generated.h
    COMMAND ./generator schema.txt generated.h
    DEPENDS mib_schema.txt.in generator.pl
    COMMENT "Regenerating header file..."
)
Run Code Online (Sandbox Code Playgroud)

是否可以在源目录中生成标头?

编辑(以反映答案):

通过使用其中任何一个完全限定其路径,可以直接访问该文件

${CMAKE_CURRENT_SOURCE_DIR}
Run Code Online (Sandbox Code Playgroud)

要么:

${CMAKE_CURRENT_BINARY_DIR}
Run Code Online (Sandbox Code Playgroud)

因此,要在我的源目录中生成标题,之前从CMakeLists.txt中摘录的内容将变为:

add_custom_command(
    OUTPUT generated.h
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h
    DEPENDS mib_schema.txt.in generator.pl
    COMMENT "Regenerating header file..."
)
Run Code Online (Sandbox Code Playgroud)

这实际上更简单.谢谢

- 至

tib*_*bur 6

我认为生成的标头很好地放在二进制目录中,因为您可能希望创建以构建具有相同源和不同配置的目录,从而生成不同的标头.

您可能希望将构建目录包含在项目中:

include_directories(${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)