2015-04-03 154 views
1

我使用CMake來配置,構建和安裝C++代碼。 我已經定義了一些用戶選項。 我添加了一個讓CMake下載外部依賴的選項。 等等等等。CMake的哪個文件組織? CMakeLists.txt應該包含其他文件嗎?

目前,有關CMake的一切都是用單個文件CMakeLists.txt寫成的。還有一個配置文件'config.cmake',它允許用戶定義各種參數,如詳細級別,庫路徑,編譯器標誌等。

什麼是CMake的優秀文件組織? CMakeLists.txt文件應該分成子文件嗎?

非常感謝您的幫助!

回答

4

一個好的文件組織取決於你的CMake邏輯有多大,或者你期望它變得多大。一般來說:

  1. 功能,可以得到重用了很多,你可能會想組織「每個主題」爲.cmake其中包含宏,並且它們包括在其他的CMakeLists.txt文件來加載功能的文件。你會在網上找到很多已經存在的東西(例如,定製特定系統庫的定製Find * .cmake文件非常常見)。常見的約定是在頂級源目錄中有一個目錄「CMake」儘管其他配置也是可能的。

  2. 如果你有許多不同的構建目標和他們自己獨特的源文件(例如,在一個項目中有多個庫),最好將它們分成子目錄,每個子目錄有一個CMakeLists.txt文件,頂層CMakeLists.txt文件使用add_subdirectory將它們「掛鉤」到主構建中。

一個項目可能看起來像這樣的「典型」的結構:

project/ 
     CMakeLists.txt 
     README 
     CMake/ 
      FindSpecialtyLib1.cmake 
      FindSpecialtyLib2.cmake 
      CustomCMakeMacroA.cmake 
       etc... 
     include/ 
      CMakeLists.txt (for installing headers, etc. if needed.) 
     src/ 
      CMakeLists.txt (top level switching logic per user settings, etc.) 
      lib1/ 
       CMakeLists.txt 
       src1.cxx 
       src2.cxx 
      lib2/ 
       CMakeLists.txt 
       src1.cxx 
       src2.c 
       private_header.h 

這只是一個假設的例子,當然是 - 你會想你的邏輯塑造您的具體項目。由於您提到了一個config.cmake文件,可能值得一提的是,根據我的經驗,大多數此類變量設置通常在CMake命令行的cmake-gui或-D定義中完成。一個config.cmake可以作爲分組選項的一種方式,但大多數用戶在設置事物時可能會以gui開頭。我還建議檢查CMake email archives的具體問題 - 我發現它是一個非常有用的資源。

相關問題