Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在发布源代码时省略未使用的boost src文件的策略_C++_C++11_Matrix_Boost - Fatal编程技术网

C++ 在发布源代码时省略未使用的boost src文件的策略

C++ 在发布源代码时省略未使用的boost src文件的策略,c++,c++11,matrix,boost,C++,C++11,Matrix,Boost,我正在使用 #include <boost/numeric/ublas/matrix.hpp> #包括 事实上,这是我包含的唯一一个boost文件。现在我想发布源代码,我希望不必包含所有数百MB的boost\u 1\u 67\u 0 如何处理此问题?您可以预处理所需的一个头文件,该头文件将扩展所有头文件,包括: c++ -E /usr/include/boost/numeric/ublas/matrix.hpp -o boost_numeric_ublas_matrix.hpp

我正在使用

#include <boost/numeric/ublas/matrix.hpp>
#包括
事实上,这是我包含的唯一一个boost文件。现在我想发布源代码,我希望不必包含所有数百MB的
boost\u 1\u 67\u 0


如何处理此问题?

您可以预处理所需的一个头文件,该头文件将扩展所有头文件,包括:

c++ -E /usr/include/boost/numeric/ublas/matrix.hpp -o boost_numeric_ublas_matrix.hpp

但要注意:这甚至会扩展系统头文件,因此它假定用户将在同一平台上构建。如果他们可能在不同的平台上编译,您只需从您的项目中省略Boost代码,让用户以他们选择的任何方式自行安装即可。

您可以预处理所需的一个头文件,该头文件将扩展其所有#包括:

c++ -E /usr/include/boost/numeric/ublas/matrix.hpp -o boost_numeric_ublas_matrix.hpp

但要注意:这甚至会扩展系统头文件,因此它假定用户将在同一平台上构建。如果他们可以在不同的平台上编译,你就应该省略项目中的Boost代码,让用户按照他们选择的任何方式安装自己。

< P>这只是你将添加到C++源代码的构建依赖列表中的东西。 这种依赖关系可以通过版本控制系统在技术上“绑定”到源代码发行版。例如,在中,您可以通过一个子模块链接到某些Boost库,该子模块链接到它们的官方git镜像(在本文撰写时)。在克隆存储库时,可以选择同时使用Boost库

不过,考虑到Boost头文件的大小,将它们作为一个系统范围的库安装可能就不那么复杂了。像这样的工具可以帮助您编写头包含的逻辑,以便支持不同的头位置


当然,如果你所寻求的是创建一个完全隔离的源代码副本,那么将所有代码烘焙成一个大的头文件的方法也可能是一个选项(但是C++不应该是必要的)。 这种依赖关系可以通过版本控制系统在技术上“绑定”到源代码发行版。例如,在中,您可以通过一个子模块链接到某些Boost库,该子模块链接到它们的官方git镜像(在本文撰写时)。在克隆存储库时,可以选择同时使用Boost库

不过,考虑到Boost头文件的大小,将它们作为一个系统范围的库安装可能就不那么复杂了。像这样的工具可以帮助您编写头包含的逻辑,以便支持不同的头位置


当然,如果您寻求的是创建源代码的完全隔离副本,那么将所有代码烘焙到一个大型头文件中的方法也可能是一种选择(但这不是必需的)。

头文件可能需要包含其他头文件。不能保证只包含头的库的头文件都是自包含的。只提供源代码,并且对Boost ublas有良好的依赖关系。然后,如果源代码的用户想要构建它,他们需要自己安装Boost。这是开源世界中处理公共库依赖关系的常用方法。如果我发布使用boost的源代码,我只会将boost列为开发环境的先决条件,并让消费者自己获取最新boost版本的副本。头文件可能需要包含其他头文件。不能保证只包含头的库的头文件都是自包含的。只提供源代码,并且对Boost ublas有良好的依赖关系。然后,如果源代码的用户想要构建它,他们需要自己安装Boost。这是开源世界中处理公共库依赖关系的常用方法。如果我发布使用boost的源代码,我只会将boost列为开发环境的先决条件,并将其留给消费者自己获取最新boost版本的副本。请允许我就CMake方法多问几句话,我应该在哪里寻找,寻找什么?@KcFnMi-CMake是一个拥有自己脚本语言(脚本语言)的工具。它被用作“元编译器”;可以为编译器工具链生成必要的makefile的工具。这使得支持多种工具链成为可能,无论是GCC、Clang还是Microsoft Visual Studio。如果您是CMake的新手,则需要花费一些时间和精力来了解它(这是另一种语言)。幸运的是,它的文档编写得很好,所需的一切都是时间和理由。请允许我再问一些关于CMake方法的话,我应该在哪里寻找,以及寻找什么?@KcFnMi CMake是一个具有自己脚本语言(the)的工具。它被用作“元编译器”;可以为编译器工具链生成必要的makefile的工具。这使得支持多种工具链成为可能,无论是GCC、Clang还是Microsoft Visual Studio。如果您是CMake的新手,则需要花费一些时间和精力来了解它(这是另一种语言)。幸运的是,它的文档编写得很好,所需的一切都是时间和理由。