2016-05-23 44 views
2

雖然定向自己的開源C++項目中,我找到了根的CMakeLists.txt文件中的代碼行之一:處理包括在CMake和C++的路徑正確方法項目

include_directories(${PROJECT_SOURCE_DIR}/../include) 

然後在一個源文件有這樣一行:

#include "someFolder/someFile.h" 

someFolderinclude文件夾中找到。

我已經看到了另一個項目不同的方法,其中 中的CMakeLists.txt有這樣的事情:

include_directories(${PROJECT_SOURCE_DIR}/../include/someFolder) 

然後在源文件中:

#include "someFile.h" 

我找到第二比第一種方法更清潔。哪一個是正確的方法或最佳實踐?

+0

第一個更像'linux-like',我發現它更好。 'someFolder'是對.h文件的封裝。名字衝突很難陷入。 –

+1

不是一個cmake問題,因爲它可以推廣到任何構建工具 – Antonio

回答

3

我更喜歡包含文件的子目錄。

這樣做的主要原因是爲了避免文件名衝突。如果依賴關係A有一個名爲someFile.h的文件,並且依賴項B也有一個名爲someFile.h的文件,則會出現問題,因爲編譯器不知道要包含哪個文件。

因此,出於同樣的原因,您應該使用命名空間,如果可能的話,還應該使用包含文件的子目錄。

0

那麼,這是基於非常的意見,在我看來......

我更喜歡前一種方法,特別是對於較大的庫。它展示了作者所期望的圖書館的邏輯結構。