我正在为C ++项目寻找一个易于维护的便携式构建系统。主要平台应包括Windows(Visual Studio 8+)和Linux(gcc); Cygwin可能是一个优势。我们正在考虑两种主要可能性: CMake 和 Boost.Jam 。 SCons也可以选择,但我还没有调查过。 CMake和Boost.Jam似乎具有以下特征:
CMake的:
Boost.Jam:
有什么其他可能性以及经验之后真正优先考虑的是什么?什么构建系统可以在途中创建解决方案?
答案 0 :(得分:15)
( - )需要每个项目文件夹中的配置文件
这是不对的,你只需要传递更大的内容,如:
add_program(foo src/foo.cpp src/main.cpp)
很少有关于Boost.Jam的说明 - 首先它不是Boost.Jam - bjam本身相当无用,你正在寻找的是Boost.Build,它是一组Jam宏,它使bjam变得有用。
现在,我与两者合作,我必须承认,Boost.Build不适合Boost本身以外的任何严肃项目。需要找到图书馆?不需要找头?不能。需要做一些简单构建之外的东西 - 你不知道怎么做它作为BB文档...完全没用,可能覆盖BB的10%。因此,大多数情况下你需要在BB邮件列表中提问并......
所以,如果你有一些复杂的项目 - 你需要做更多的事情然后简单的编译和链接,远离Boost.Build。
因此,如果您需要支持MSVC,我今天发现CMake是唯一可行的选择。
我不是说CMake是非常好的系统,它有很多问题,但它是一些东西 主要适用于跨平台开发(如果您需要支持MSVC)。
如果您不关心MSVC并对MinGW感到满意......请看一下autotools。
关于Scons - 它们仍然不那么成熟了。
答案 1 :(得分:13)
这有点咆哮,但我会尽量保持客观,只报告我的经历:
我已经尝试了几次CMake,我已经接近达到这样的程度,我将自愿为每个构建环境维护单独的项目文件或滥用其他语言的构建系统(Ant,NAnt,MSBuild等)来编译并打包我的C ++项目。
CMake,因为它是:
我个人认为,即使有人想故意设计最糟糕的跨平台构建系统,也很难比CMake更糟糕。
我对Boost.Build没有任何经验,它可能也有同样严重的缺点,但我能说的关于CMake的最好的方法是,如果您唯一关心的是以某种方式构建的某些源文件,它可以完成工作 - 尽管开发人员和图书馆/应用程序消费者都有很多痛苦。
答案 2 :(得分:9)
我在premake4上有过一些很好的经历:http://industriousone.com/premake
<强>更新强>
我仍然喜欢预制,但经过一段时间的努力,我觉得有必要列出我在其中发现的一些缺点:
答案 3 :(得分:5)
我会在 QMake 上关注@Akusete,这是我现在选择的个人工具。利弊也有点个人化,但在这里它们是:
mkspec
语言编写的自定义qmake
); app
,lib
等,但是在一次传递中构建共享和静态库版本或者为单个源禁用预编译头文件有点麻烦文件。这绝对是可以实现的,但需要一些谷歌搜索并且看起来很脏; QT -= core gui
行轻松覆盖)快速完成简单到中等项目的工作,但仍然留下了“该死的感觉,它可以以更简单的方式完成!”应用于复杂的任务时。