在我的公司,我們正在開發一箇中型項目,我們計劃使用CMake作爲構建平臺生成器。在這種情況下,我和我的同事們正在討論應該使用CMake的方式。我們的討論達成了一個轉折點,我們必須決定使用的方法。我們的目錄結構與此類似:CMake在一箇中型項目中的最佳方式是什麼?
<"our project"> \
modules \
module_1 \
tests \
test_example.cpp
mock
some_mock_class.hpp
some_class.hpp
some_class.cpp
...
module_2 \
...
module_3 \
...
utility \
...
1 - 第一件事是先,我的同事認爲,像「SRC」和文件夾「包括」是C編程的提醒,並沒有發生在現代C++程序,所以我們不需要它們。所以我們將它們從結構中移除,但是成爲一名Linux員工;我不確定這是否是一個好主意。我們是否應該爲頭文件設置一個「include」目錄,以便CMake可以將它們適當地安裝到安裝目標的include目錄中;或者CMake可以適當地處理它們?我們是否應該爲包含並定義所有目標的項目根目錄創建一個CMakeLists.txt,或者我們應該爲每個模塊創建一個CMakeLists.txt,然後使用「add_subdirectory」指令來包含它們?我的同事認爲CMakeLists.txt是最好的,因爲這種模塊實現者完全不需要考慮CMake,而且一兩個管理員可以維護文件;但我認爲每個模塊實現者都更加意識到他們使用哪些庫,以及如何編譯他們的模塊 - 他不同意這一點。你在這種情況下建議什麼?
如果您之前(或知道案例)之前確實使用CMake做過這樣一箇中等規模的項目,請您推薦我們他們做了什麼,如果可能的話,爲什麼?
真誠
只有一點你的觀點:每個模塊/目標一個'CMakeLists.txt'是正確的決定。根據我的經驗,模塊的實現者不需要深入瞭解CMake。 CMake非常簡單,實現者通常會從其他模塊之一複製一個「CMakeLists.txt」模板並更改一些屬性。管理員可以提供更先進的指導,例如如果其中一個模塊需要特殊處理。當項目變得越來越大時,您可能會考慮將經常使用的功能放入CMake宏/函數包裝器中。 – Florian
你可以禮貌地問你的同事看看CMake是另一種編程語言,例如, [模塊化編程](https://en.wikipedia.org/wiki/Modular_programming)是一個好主意(正如你用C++代碼所做的那樣)並將所有東西放到一個源文件中可能是件壞事。 – Florian
他將那些CMakeLists.txt文件稱爲「垃圾」,並說「他不想在我們的源代碼中看到這些垃圾」......所以,我不知道他是否可以客觀接受你的觀點:) TBH ;我是「每個模塊一個」方法的專家。它似乎更容易維護,但我想了解說服別人的好例子;) –