Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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++;构建系统 我正在寻找一个好的和易于维护的便携式构建系统,用于C++项目。主要平台应包括Windows(Visual Studio 8+)和Linux(gcc);Cygwin可能是一个优势。我们正在考虑两种主要的可能性:CMake和Boost.Jam。烤饼也是一种选择,但我还没有调查过。CMake和Boost.Jam似乎有以下特点:_C++_Build Process_Portability - Fatal编程技术网

便携式C++;构建系统 我正在寻找一个好的和易于维护的便携式构建系统,用于C++项目。主要平台应包括Windows(Visual Studio 8+)和Linux(gcc);Cygwin可能是一个优势。我们正在考虑两种主要的可能性:CMake和Boost.Jam。烤饼也是一种选择,但我还没有调查过。CMake和Boost.Jam似乎有以下特点:

便携式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有过一些很好的经验: 更

CMake:

  • (+)生成本机“makefile”(Windows解决方案,Eclipse项目)
  • (+)测试和包装扩展
  • (-)要求每个项目文件夹中都有一个配置文件
  • (-)基于有点过于冗长的特殊语言
Boost.Jam:

  • 自行构建,无需中间步骤
  • (-)不生成本机解决方案/项目
  • (+)类似于经典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对此非常满意
  • 对如何引用库的控制很少。有一系列的参考查找方法(所以即使控制不好,也不能期望任何一致性)
我个人的观点是,即使有人想故意设计最糟糕的跨平台构建系统,也很难比CMake做得更糟


我对Boost.Build没有任何经验,它可能也有同样严重的缺点,但关于CMake我能说的最好的话是,如果您只关心以某种方式构建一些源文件,它可以完成这项工作——尽管对开发人员和库/应用程序消费者来说会有很多痛苦。

我将在QMake上关注@Akusete,这是我目前个人选择的工具。利与弊也有点私人化,但它们是:

赞成的意见:
  • 与CMake相比,脚本语言更加简洁
  • 可以在Windows上生成VS项目和jom兼容的makefiles
  • 例如,为交叉编译添加工具链非常容易(归结为一个定制的
    mkspec
    ,它是用相同的
    qmake编写的