在我的项目中,我有两个版本的相同的系统库: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