我正在开发一个使用 boost 库的代码库。但是,我最近在新用户的机器上构建基础时遇到了问题。我能够将问题归结为以下问题。下面是构建系统的样子:
/root
/SubModules_with_Makefiles_and_Code
/thirdparty/boost
子模块代码将引用像这样的 boost 内容(例如):
#include <boost/property_tree/ptree.hpp>
并且子模块 make 文件将构建这样的代码(例如):
g++ -c -o code.o code.cpp -I/root/thirdparty/boost
我们的 3rd 方 boost 库是 1.37 版。但是,一些模块已经开始使用更高版本的 boost。这个问题已被掩盖,因为构建这些模块的机器包含安装在 /usr/include/boost 中的 boost 1.41。
问题来了,因为新用户的机器没有在 /usr/include 中安装 boost 1.41。理想情况下,我希望 g++ 在第三方目录中寻找提升,而不是在其他任何地方。这样,我们可以更严格地控制代码库的构建方式。
-I<dir> 在查找期间将 <dir> 放置在系统包含之前,但仍会查看系统包含,并且可以根据机器安装更高版本的 boost。我可以抑制查看系统包含的内容,但这将是一个真正的痛苦。
除了替换之外,还有什么聪明的方法可以解决这个问题:
#include <boost/something.hpp>
至
#include <thirdparty/boost/something.hpp>
? 如果有帮助,我在 redhat linux 上使用 gnu make 3.81 和 g++ 4.4.5。