便携式C++;构建系统 我正在寻找一个好的和易于维护的便携式构建系统,用于C++项目。主要平台应包括Windows(Visual Studio 8+)和Linux(gcc);Cygwin可能是一个优势。我们正在考虑两种主要的可能性:CMake和Boost.Jam。烤饼也是一种选择,但我还没有调查过。CMake和Boost.Jam似乎有以下特点:
CMake:便携式C++;构建系统 我正在寻找一个好的和易于维护的便携式构建系统,用于C++项目。主要平台应包括Windows(Visual Studio 8+)和Linux(gcc);Cygwin可能是一个优势。我们正在考虑两种主要的可能性:CMake和Boost.Jam。烤饼也是一种选择,但我还没有调查过。CMake和Boost.Jam似乎有以下特点:,c++,build-process,portability,C++,Build Process,Portability,CMake: (+)生成本机“makefile”(Windows解决方案,Eclipse项目) (+)测试和包装扩展 (-)要求每个项目文件夹中都有一个配置文件 (-)基于有点过于冗长的特殊语言 Boost.Jam: 自行构建,无需中间步骤 (-)不生成本机解决方案/项目 (+)类似于经典makefile的简洁语言 (+)对多线程和静态/动态库等属性的直观支持 有什么其他的可能性,什么是真正的经验后更可取的?什么构建系统可以在途中创建解决方案?我对premake4有过一些很好的经验: 更
- (+)生成本机“makefile”(Windows解决方案,Eclipse项目)
- (+)测试和包装扩展
- (-)要求每个项目文件夹中都有一个配置文件
- (-)基于有点过于冗长的特殊语言
- 自行构建,无需中间步骤
- (-)不生成本机解决方案/项目
- (+)类似于经典makefile的简洁语言
- (+)对多线程和静态/动态库等属性的直观支持
有什么其他的可能性,什么是真正的经验后更可取的?什么构建系统可以在途中创建解决方案?我对premake4有过一些很好的经验: 更新 我仍然喜欢premake,但在使用它一段时间后,我觉得有义务列出我在其中发现的一些缺点:
- 不支持集成新的工具链(即bison或moc等预处理工具)李>
- 不支持每文件配置
- 库查找不灵活,不支持脚本或版本检查
- 一些指令(例如配置)会影响以下语句,但没有明确的范围划分。这可能会导致微妙的错误李>
- 对调试配置几乎不支持,换句话说,除了检查生成的构建脚本或运行它们之外,显示配置是如何被解释的
- 至少对于gmake Makefiles来说,没有使路径成为绝对路径的选项。这与Vim的quickfix不配合,尽管它很容易解决李>
- 发展步伐缓慢。新功能可能会持续开发数年李>
add_program(foo src/foo.cpp src/main.cpp)
关于Boost.Jam的几点注意事项-首先,它不是Boost.Jam-bjam本身非常无用,您正在寻找的是Boost.Build,这是一组使bjam有用的Jam宏
现在,我和这两个项目都合作过,我必须承认,Boost.Build不适合Boost本身之外的任何严肃项目。需要找图书馆吗?不需要找到标题吗?不能需要做一些简单构建之外的事情-而你不知道如何做BB文档。。。完全没有用,可能占BB的10%。所以大多数情况下,你需要在BB邮件列表中提问,并且
因此,如果您有一些复杂的项目,并且您需要做一些比简单的编译和链接更简单的事情,请远离Boost.Build
所以,如果你需要支持MSVC,我认为今天CMake是唯一可行的选择
我不认为CMake是一个很好的系统,它有很多问题,但它确实是一个东西
最适合跨平台开发(如果您需要支持MSVC)
如果你不在乎MSVC和MinGW的快乐。。。看看自动工具吧
关于烤饼-他们的制作还不够成熟。这有点夸张,但我会尽量保持客观,只报告我的经历:
我曾尝试过CMake,我接近一个点,我会自愿为每个构建环境维护单独的项目文件,或者滥用另一种语言的构建系统(Ant、Noad、MSBug或SO)来编译和打包我的C++项目。 CMake,事实上:
- 它用一种设计极其糟糕的自由格式(CMakeLists.txt)取代了一种丑陋但形式化的格式(Makefile)
- 它将配置、缓存和其他杂乱内容转储到所有目录中,而不考虑用户保持源树干净的尝试
- 大多数地方都缺少CMake的文档(例如,尝试递归地将源目录添加到目标wile,但不包括某些文件)
- 生成的IDE项目非常糟糕(是否有一个结构良好的Visual Studio项目?CMake将把所有源代码转储到单个项目节点中)
- 生成的IDE项目使用绝对路径(因此您不能将它们签入源代码管理——每个人都必须使用CMake)
- 生成项目/生成文件时,只能在平台(例如x64和x86)之间进行选择。CMake不会生成支持多个平台的项目,即使IDE对此非常满意
- 对如何引用库的控制很少。有一系列的参考查找方法(所以即使控制不好,也不能期望任何一致性)
我对Boost.Build没有任何经验,它可能也有同样严重的缺点,但关于CMake我能说的最好的话是,如果您只关心以某种方式构建一些源文件,它可以完成这项工作——尽管对开发人员和库/应用程序消费者来说会有很多痛苦。我将在QMake上关注@Akusete,这是我目前个人选择的工具。利与弊也有点私人化,但它们是: 赞成的意见:
- 与CMake相比,脚本语言更加简洁李>
- 可以在Windows上生成VS项目和jom兼容的makefiles李>
- 例如,为交叉编译添加工具链非常容易(归结为一个定制的
,它是用相同的mkspec
qmake编写的