【问题标题】:cmake vs waf for C++ projectC++ 项目的 cmake vs waf
【发布时间】:2023-03-10 18:17:01
【问题描述】:

我发现了类似的主题:What are the differences between Autotools, Cmake and Scons?,但我的问题有点不同,我认为答案也可能不同。

我发现很多文章都说 waf 不稳定(API 更改),尚未准备好投入生产等(但所有这些文章都有 2 或 3 年的历史)。

如果我愿意,应该使用以下哪些构建工具:

  • 创建大型 C++ (11) 项目 - 假设是一个复杂的编译器
  • 与 LLVM 一起使用
  • 确保它灵活且易于使用
  • 确保它足够快
  • 在所有标准平台下编译(基础平台是Linux,但我也想在Windows和MacOSX下编译)

阅读了很多文章,我发现 Cmake 和 waf 是可用的“最佳”工具,但我没有使用它们,而且很难找到任何比较,这不是很偏颇(比如比较 scons作者)而且不是很老。真的

【问题讨论】:

    标签: c++ build cmake build-automation waf


    【解决方案1】:

    waf 几乎可以满足您的所有要求 ...

    ...但是 waf 似乎对 llvm 有问题:http://code.google.com/p/waf/issues/detail?id=1252

    编辑:正如 Wojciech Danilo 所说,LLVM 问题已得到修复

    【讨论】:

    • 不,它没有问题 - 我已经设法解决它,我刚刚将解决方案添加到主题:)
    • Additional 我发现 Waf 比 cmake 灵活得多,而且真的很容易使用。我们在此基础上构建了我们的自定义构建系统,效果很好!
    【解决方案2】:

    我目前正在通过 C++11 和 LLVM 将 CMake 用于我自己的语言实现。

    我喜欢 CMake,因为它易于使用的语法。 LLVM 可以使用简单的“load_package”命令加载。之后,您可以使用所需的所有头文件和库。 CMake 允许子脚本从父脚本继承变量。所以你不需要在每个子目录中设置变量和加载包。

    C++11 支持取决于您要使用的编译器。总而言之,CMake 只是一个用于创建“真实”构建脚本的布局。

    当您使用 make 时,您可以使用 make 的 --jobs=N 来加速多核平台上的编译。在 Windows 上,您可以生成 Visual Studio 2012 项目文件并使用 Microsoft 的构建系统并使用他们的构建作业来加快编译过程。 您应该始终为构建文件(myproject/build 或其他东西)创建一个子文件夹。这样你就可以保持你的源代码树干净(cd build; cmake ..; cd ..)。

    我不能代表所有其他工具。

    【讨论】:

    • 当我们迁移到cmake时;这是一个非常痛苦的学习。文档——尽管有所改进——令人困惑。基于宏的语言使阅读 cmake 成为一场噩梦(直到你训练你的眼睛),但最终所有这些都是值得的。我没有使用waf,但考虑将它用于其他项目。自从它基于 python 以来,它很诱人。
    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多