2010-11-19 124 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

相關問題