进行安装与就地链接
make install vs. inplace linking
当以拓扑排序顺序构建 multiply dependant C++ CMake 项目(在 Linux 中)时,我们有两种可能性:
遍历每个项目,然后...
-
。"安装"它在某些前缀中。在项目中构建库时,链接到已安装的库。
-
。通过"制作"构建它,不要安装。在项目中构建库时,请就地链接到已构建的库。
这些选择的优缺点是什么?由自制脚本执行构建,该脚本解析依赖关系,以正确的顺序构建等。
你可以同时做这两件事。但是"安装"的想法是将库,标头,文档等放置在定义良好的目录中,该目录不依赖于源代码树的布局。
单独的源代码,通常只有该包的程序员感兴趣,以及编译的proagram库等,这对于其他包的用户和程序员来说很有趣。
假设您必须更改一个子包的目录结构。如果不安装,您将不得不调整所有其他脚本。
所以:
解决方案1 的优点(== 解决方案 2 的缺点)
- 更好的整个包的可维护性
- "预期"的方式
make
和make install
应该执行两个概念上不同的事情。它们没有更好或更坏。我将通过描述使用make
的程序安装的通常顺序来解释(来自"Unix编程的艺术"):
-
make(all) - 您的所有产品都应使项目的每个可执行文件。通常所有生产没有明确的规则;相反,它指的是您的所有项目的顶级目标(并且,并非偶然地记录了这些目标是什么)。按照惯例,这应该是您的制作文件中的第一个作品,因此它将是当开发人员类型在没有参数的情况下执行的那个。
-
make test - 运行程序的自动测试套件,通常由一组单元组成测试以查找回归、错误或与预期行为的其他偏差在开发过程中。也可以使用"测试"生产由软件的最终用户提供,以确保其安装正常运行正确。
-
make install - 在系统目录中安装项目的可执行文件和文档,以便一般用户可以访问它们(这通常需要root权限)。初始化或更新可执行文件所需的任何数据库或库才能发挥作用。
感谢埃里克·史蒂文·雷蒙德的回答
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 将"libpqxx"与Visual Studio 2013链接/安装,以便与PostgrSQL建立C++连接
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- Assimp模型加载库安装/链接故障
- 安装Glog链接错误
- C++ / GoogleTest - 如何在链接目录中为每个测试运行安装程序
- 在 Code::Blocks 中使用自定义安装目录在 Windows 上链接 SDL-bgi
- 协和式飞机安装:需要链接一个lp求解器才能使用此功能
- boost/filesystem.hpp未通过Homebrew安装的OSX Boost链接
- 安装C和C++的MessagePack实现时发生链接器错误
- 已安装 MPI,但仍出现链接器错误LNK2019
- 进行安装与就地链接
- libtool:安装:错误:在安装之前将"libmyprog.la"与上述命令重新链接
- CMake,链接目录和多个Boost安装
- LNK4099链接器警告与干净安装Qt SDK和Visual c++ 2008
- OSX 10.10.5 - c++库,如何更改链接或添加环境标志,以酿造安装版本
- PCL安装链接直接到boost安装目录
- 将本地JSONCpp安装与CMake和ExternalProject_Add链接
- 链接错误:在Visual Studio(2012)中使用NuGet安装boost zlib过滤器