C++ 构建系统

标签 c++ linux build

我将很快开始一个新的 C++ 项目(它也可能包含一些 C 组件),并且我正在寻找一个现代的、工业级的(即非测试版)构建系统。该软件将在 3-5 年内由多个开发人员创建,并将在 Linux 上运行(Mac OS X 和 Windows可能稍后会支持)。我正在寻找比例如具有更好的可理解性、易用性和可维护性的东西。 make 但仍然足够强大,可以处理复杂的项目。开源软件优先。

到目前为止,我开始研究 Boost.BuildCMakeMavenSCons 并喜欢这些功能和所有这些概念,但我缺乏为大型项目做出决定的经验。

最佳答案

我没有其他人的经验,但如果您正在寻找跨平台、跨工具链的构建系统,请使用 CMake。 CMake 实际上并不是一个构建系统,它是一个构建脚本生成器——它为许多构建系统生成实际的构建脚本,并且(在我看来,这就是它的优势)为 Visual Studio 和 KDevelop 等主要 IDE 生成项目文件。顺便说一下,最近的 KDevelop 版本具有用于 CMake 文件的 Intellisense。

生成的构建脚本或 Visual Studio 解决方案不像手动创建那样优雅,但由于您也不必手动维护它们,这很好。

CMake 的缺点是它实际上并没有很多内置工具,也没有一种简单的扩展方法(与例如 MSBuild 相比,它当然只是一个构建系统,而不是生成器) .我们的 Linux 开发人员倾向于调用 Unix 命令行工具来执行压缩/解压缩之类的操作,这在典型的 Windows 安装中不可用,而相比之下,MSBuild 有数千个来自社区项目的附加命令,因此您无需使用命令行,为 MSBuild 创建一个新任务真的很容易。我目前正在研究如何绕过 CMake 的这些限制,因为目前这意味着我们不能完全在 Windows 上构建,即使代码本身可以构建良好。

编写 CMake 文件并不是一种美妙的体验,但没关系。该语言有一些奇怪的怪癖(比如必须在 else 和 endif 中精确重复一个 if 条件,这会让你发疯,尤其是在试验时),你真的非常讨厌在每个和中都有一个名为 CMakeLists.txt 的文件每个具有自定义构建规则的目录(在大型项目中可能很多),并且它们都只显示在您的 IDE 中的名称;)

关于C++ 构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847730/

相关文章:

c++ - 二维 vector 未正确保存和加载 boost::serialize 库

Python MySQLdb 在 Python 命令行上运行,但不能在 Django Views.py 上运行

linux - 如何仅在用户登录到桌面环境时启动服务

node.js - 奇怪的 Create-React-App Heroku 错误 - 无法获取/

c++ - 如何删除作为 map 值的项目

c++ - 打印到 cout 时舍入双数

c++ - 是否为未使用的模板类方法生成目标代码?

linux - setfacl 删除组权限

ios - Xcode 4 : Build Failed, 没有问题

angular - 构建错误 : unexpected value null exported by the module