在我的項目中,我有兩個版本的相同的系統庫:SysLib1.0
和SysLib2.0
。這兩個庫被系統的其他組件大量使用。CMake包含目錄衝突
SysLib1.0
標題位於某個目錄:/project/include
。下面是該項目的內容的例子包括目錄:
/project/include/syslib/
/project/include/awesomelib/
/project/include/coollib/
所以很自然的,在CMake的,其它組件使用include_directories(/project/include)
來訪問系統和其它組件頭。 C++源代碼可以訪問頭像這樣:
#include <syslib/importantheader.hpp>
SysLib2.0
被安裝在一個單獨的位置,以避免連接的問題。 SysLib2.0
的頭文件都存儲在這裏:
/opt/SysLib2.0/include
所以很自然的,在CMake的需要SysLib2.0
使用include_directories(/opt/SysLib2.0/include)
,其他組件。 C++源代碼可以訪問的頭,像這樣:
#include <syslib/importantheader.hpp>
現在我們已經遇到了問題。我正在撰寫的新組件需要訪問/project/include
才能訪問awesomelib
,但是也需要SysLib2.0
。這也涉及包括/opt/SysLib2.0/include
。現在當我說#include <syslib/importantheader.hpp>
時,這可能是指任何版本的庫。正如它應該的那樣,編譯器向我發出了一些重定義錯誤。
更糟的是,SysLib1.0
和SysLib2.0
在自己的庫中查找標題時都將其自身稱爲syslib/...
,這同樣也是模糊不清的。
有沒有人有我如何從包含路徑中排除特定目錄的想法?即使我包含如我的示例中所示的父目錄?任何解決方案或建議表示讚賞。
您使用的是什麼編譯器? – Alex
我正在使用gcc 4.7.3 – trianta2