2015-11-07 63 views
3

我想向cmake介紹一下自己。我在Windows上使用它來生成MinGW Makefiles。如何在cmake中包含標題

我習慣於在同一目錄中有一個C++類的頭文件和源文件,以及由模塊組織的目錄。

我想我的cmake配置有任何cpp依賴於其相應的h文件。另外我希望h和cpp總是存在於同一個目錄中。

從我讀過的,在cmake中,在我的add_executable行中,列出了所有我想編譯的cpp文件。

如果我在我的add_executable行中列出了src/module1/myclass.cpp,那麼如果myclass.cpp列出#include,cmake將在哪裏查找myclass.h?它會使myclass.cpp依賴於myclass.h嗎?這是我想要的行爲。

+1

如果#include頭文件,它將是相關的;你不需要在你的CMakeLists中做任何特別的事情。將頭文件放置在與cpp相同的目錄中以確保找到它,這樣就不必混淆頭部搜索路徑。 –

+2

重複這個http://stackoverflow.com/questions/33578594/cmake-does-not-include-sub-directory-when-building/33578725#33578725? – fghj

回答

2

我想我的cmake配置有任何cpp依賴於其相應的h文件。

CMake會自動計算出cpp和h文件之間的依賴關係。它通過使用您的平臺構建工具來完成。例如,它知道如何告訴gcc生成依賴文件,然後它可以處理該文件。在像Visual Studio這樣的其他平臺上,CMake知道如何告訴cl.exe輸出標頭依賴關係,並且它也可以解析該輸出。

你不需要做任何特別的事就可以讓CMake正確處理你的頭文件依賴。你所要做的就是確保在編譯期間找到頭文件。

如果我在我的add_executable行中列出了src/module1/myclass.cpp,那麼如果myclass.cpp列出#include,cmake將在哪裏查找myclass.h?

編譯器會在其默認位置,你可以通過運行include_directories(...)命令(設置它們整個的CMakeLists.txt文件),或者通過運行target_include_directories(your_executable_target ...)來設置他們只是一個配置額外的搜索路徑可執行文件。

如果你的頭文件都存儲旁邊的cpp文件,你給從cpp文件位置#include相對路徑(並使用#include "..."代替#include <...>),那麼你就不需要配置標題搜索路徑:所有的編譯器我知道默認情況下相對於cpp文件的搜索。