C++ 手动将header.hpp文件复制到我的project\u root/boost库中是否正确?

C++ 手动将header.hpp文件复制到我的project\u root/boost库中是否正确?,c++,eclipse,boost,C++,Eclipse,Boost,我在阅读文档时发现它非常模糊: 要在Boost中编译任何内容,需要在#include路径中包含Boost/子目录的目录 因为Boost的所有头文件都有.hpp扩展名,并且都在 boost根目录的boost/子目录,您的boost#include 指令将如下所示: 根据您对使用角括号的偏好 包括 我是否应该始终在项目根目录中创建一个名为“boost”的子目录,然后手动将所需的每个.hpp文件从boost安装/头目录复制到项目根目录/boost目录中 我还可以看到告诉Eclipse自动扫描boost

我在阅读文档时发现它非常模糊:

要在Boost中编译任何内容,需要在#include路径中包含Boost/子目录的目录

因为Boost的所有头文件都有.hpp扩展名,并且都在 boost根目录的boost/子目录,您的boost#include 指令将如下所示:

根据您对使用角括号的偏好 包括

我是否应该始终在项目根目录中创建一个名为“boost”的子目录,然后手动将所需的每个.hpp文件从boost安装/头目录复制到项目根目录/boost目录中

我还可以看到告诉Eclipse自动扫描boostroot安装/include目录中的头文件,从而避免手动复制。此外,我还可以看到在projectboost文件夹中创建一个指向boostroot安装/include目录的软链接,这样就可以包含所有内容,而无需制作单个手动副本

我看到的一个区别是在我的项目中包含boost头文件在我的项目中不包含它们并在外部引用它们


我不确定这些策略中哪一个是正确的。这里的最佳实践是什么?

将库标题复制到项目中是不寻常的,当然也不是好的实践,而且根本没有必要。
使用
-I
选项告诉编译器要搜索包含文件的其他路径。

关于Eclipse CDT,您可以使用项目属性的C++-Build选项添加额外的include路径。

对于小型开发项目,正确的选项可能是您建议的:

“我还可以看到告诉Eclipse自动扫描boost root安装/include目录中的头文件,从而避免手动复制。”(特别是,将boost安装的include目录添加到编译器/Eclipse搜索路径中。)

这就是boost文档的意思,在#include路径中有一个包含boost/的目录

对于小型的单个项目,如果您的boost安装很少发生更改,那么您不会真的想为每个项目创建boost包含的手动构建链接,除非这是跨项目构建策略的一部分。我曾在一些组织中工作过,在这些组织中,这样做是有充分理由的,基本上是为了让您能够通过切换一些符号链接来设置指向不同版本的boost(或其他第三方库)的不同构建实例,而不是混淆make依赖项和路径

因此,如果您希望获得这种级别的灵活性,那么在项目中设置boost的include、lib等的sym链接可能是一种选择


但是,每次手动将boost头文件复制到项目中并不是一个好方法。

外部引用它们

将库文件复制到应用程序项目中只是在更高级别上复制粘贴代码。不要这样做。它通常会导致一个非常非结构化的软件体系结构。您甚至应该采取相反的方向:模块化您的项目自己的代码来创建您自己的内部库,然后您的项目会像对待Boost库或标准库一样对待这些库。这是应用程序项目文件的外观:

#include <your_own_library/whatever.h>
#include <boost/whatever.hpp>
#include <string>

class ApplicationSpecificClass
{
 // ...
};
#包括
#包括
#包括
类应用程序SpecificClass
{
// ...
};
从库和API的角度思考将显著提高您的软件工程技能。它只要求您进一步了解构建环境以及编译器和链接器(创建库和使用库)的功能选项。学习如何使用Boost库是一个良好的开端,因为它们中的大多数都是只包含标题的库,这使得一切都变得更容易

#include "boost/whatever.hpp"
#include <your_own_library/whatever.h>
#include <boost/whatever.hpp>
#include <string>

class ApplicationSpecificClass
{
 // ...
};