2010-11-19 77 views
5

在我的项目中,我有一个“模式”文件和实用程序,我写的生成一个头文件。 我使用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..." 
) 

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

编辑(以反映答案):

该文件可以通过完全限定其路径有两种

${CMAKE_CURRENT_SOURCE_DIR} 

或直接到达:

${CMAKE_CURRENT_BINARY_DIR} 

所以,在我的源代码目录中生成头文件,之前从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..." 
) 

这实际上更简单。 感谢

--to

+0

其实,这是一个好主意。如果我可以将生成的文件保存在源代码目录中,它将包含在源代码包中,这正是我想要的(因为只要它们不修改生成器,我的库的用户不需要生成该文件, /或源数据文件)。这意味着更多的人可以编译我的库! – 2013-02-20 05:39:05

回答

5

我认为生成的头也被放置在二进制文件目录,因为你可能希望创建构建具有相同的源并导致产生不同的头不同的配置目录。

您可能要包括构建目录到您的项目:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

如果CMake无法找到你的文件,那么用'$ {CMAKE_CURRENT_BINARY_DIR}'完全限定它们。如果您确定要在源目录中创建文件,则可以在“configure”和“add_custom_command”命令中使用'$ {CMAKE_CURRENT_SOURCE_DIR}'。 – tibur 2010-11-19 12:50:18

+0

我同意,生成文件的最佳位置在构建目录中。 这个头文件在源代码目录中很方便,因为它在编码时提供了有用的代码完成。 对于所有构建配置来说,它是相同的头文件,因此将它放在源目录中根本不是有害的。 注意:编辑评论时出现问题,可能是因为我在一个大型网络上抛出一个独特的IP。对困惑感到抱歉。 – amso 2010-11-19 13:56:55

相关问题