2012-05-14 86 views
0

我們使用CMake爲Visual Studio 2008生成解決方案文件。除了構建庫和可執行文件的常規源項目之外,我還希望有一個僅包含配置文件的項目。這些文件用於在運行時配置項目的行爲。他們不需要構建項目,但將它們包含在解決方案中可以方便地編輯這些文件。我能做到這add_custom_target使用像這樣:如何讓CMake創建一個僅包含配置文件的Visual Studio項目?

file(GLOB ini_files ${PROJECT_SOURCE_DIR}/../config/ini/*) 
source_group(ini FILES ${ini_files}) 
file(GLOB xml_files ${PROJECT_SOURCE_DIR}/../config/xml/*) 
source_group(xml FILES ${xml_files}) 
add_custom_target(config SOURCES ${ini_files} ${xml_files}) 

這給了我一個包含配置文件的子文件夾的「配置」項目。但是,還有一個名爲「config」的鏈接指向一些不存在的文件。我認爲這應該是這個規則創建的目標的鏈接。由於沒有什麼可以建立的,這仍然是一個死路。現在我的問題是:

  1. 是add_custom_target正確的方式來實現我想要的? 如果不是,那麼更好的解決方案是什麼?
  2. 如果是正確的方法,我該如何擺脫與目標名稱的鏈接?另外,我想刪除「CMake Rules」文件夾以使配置項目儘可能地乾淨。

回答

2

Visual Studio項目實質上是根據一組源文件構建目標。

不建議有一個只存在一組靜態文件的項目,因爲只要添加一個自定義目標,CMake就會盲目地嘗試爲該項目創建一個輸出,以便與其他項目保持兼容後端系統。 試想一下,如果CMake創建了一個沒有實際目標的Unix Makefile,那甚至不會是Makefile,對嗎?

正確的做法是將文件實際添加到另一個現有項目。從技術上講,如果您正在構建可執行文件,並且此可執行文件在運行時讀取配置文件,則這些文件合法地成爲項目的一部分。另外,我不推薦使用文件globing來列出源文件或配置文件,因爲如果您在文件夾中添加文件,CMake將無法知道已添加新文件,並且Visual Studio項目將不會被重新生成以包含這些文件。相反,您應該列出CMakeLists.txt文件中的每個文件,以便在那裏添加新文件將觸發cmake文件再生。對於最後一點,如果你確實需要「乾淨」的項目,那麼CMake不是你需要的工具,因爲它產生的所有東西都有助於保持一致的構建過程。

+0

謝謝你這個有見地的答案。將這些文件添加到現有的項目中,我自己記住了;但問題是,這些項目實際上構建了我們項目外部框架使用的模塊(動態庫,dll或其他文件)。所以也許會把配置文件放到它們所屬的模塊中;有些被多重使用。還有一些文件將框架配置爲使用模塊,因此不會被任何模塊讀取。我知道,對於Unix Makefiles來說這沒有用,但是這個項目的唯一目的是將配置文件添加到VS. – ahans

+0

@ahans沒有什麼能阻止你在多個項目中包含文件。開銷很小,因爲沒有文件會被複制。 – SirDarius

+0

有趣的一點。這並不能解決配置框架的文件問題。我會牢記這一點,可能會在某些時候派上用場。現在我通過使用'add_library'解決了這個問題。這正是我想要的。 – ahans

相關問題