2011-07-07 28 views
1

在包含多個目標的項目中,我希望僅爲某個目標添加包含庫。我不想通過向所有項目添加許多包含庫來減慢編譯速度,而且我確實希望如果我沒有指定所需的庫作爲可執行文件的依賴項,它將在編譯時失敗,而不僅僅是鏈接時間。include_libraries僅針對單個目標

在CMake中有沒有辦法做到這一點?類似於target_link_libraries,但僅適用於包含目錄?

回答

1

首先,我不打擾編譯時間可能增加,因爲你添加了很多包含目錄。當然,你應該測試它是否真的是一個問題。

您可以嘗試直接在源文件上指定COMPILE_FLAGS屬性,但這可能不是跨平臺的,需要在每個源文件上完成。

或者,考慮拆分子目錄中的項目併爲每個子目錄編寫一個單獨的CMakeLists.txt。在這種情況下,include_directories()調用僅限於當前項目(及其子項目)的範圍,您可以對每個項目進行更細粒度的控制。

在編譯時要求失敗可能存在問題:例如,當使用靜態庫A時,取決於B,取決於C:當某些人將exe/dll鏈接到A時,需要庫B和C,但在編譯時不一定可檢測到...並且一般難以解決與CMake。

+0

編譯時間是較小的問題,失敗的早期是大問題。 –

+0

然後接下來的問題是:我們是否處理多個相關的靜態庫?如果是這樣,這將是困難的,雖然有一些創建預處理器,cmake哈希也許可以實現 –