4

我正在开发一个使用 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。

4

2 回答 2

0

查看“包含路径”命令行选项 (-I)。您可以设置搜索包含文件的位置。文档在这里

于 2013-02-12T21:12:54.230 回答
0

您可能想查看 gcc 手册的第 2.3 节:http: //gcc.gnu.org/onlinedocs/cpp/Search-Path.html

您正在寻找的编译器开关很可能是

-nostdinc

但最好自己看看。

编辑:哎呀,我刚刚看到你不想禁用默认搜索路径 - 在这种情况下,只需使用 -I 开关:

您可以使用 -Idir 命令行选项添加到此列表。在默认目录之前,按从左到右的顺序搜索所有由 -I 命名的目录。

于 2013-02-12T21:15:52.513 回答