ant+cpptasks 与 scons 与 make

2024-03-08

我正在调查scons http://www.scons.org/我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么。我过去一直在使用 GNU make,但从来没有对它感到特别满意。

特别是:为什么 Ant 没有更频繁地用于 C / C++ 项目? (假设有ant cpp任务 http://ant-contrib.sourceforge.net/cpptasks/index.html)我读过一些文章,说 Ant 更面向 Java(显然),但是这样做有什么缺点呢?为什么 scons 比 make 好得多?

我正在使用 TI DSP 的交叉编译器,通常一个项目中有 20-50 个 cpp 文件。构建管理中的困难部分似乎是自动依赖性检查。其他一切只是将文件列表与编译器选项集映射在一起。

edit:为什么交叉编译会改变什么?它是一个编译器,其运行方式与 gcc 的运行方式相同,只是它生成的目标文件/可执行文件无法在我的 PC 上运行。


对于交叉编译,我认为你最好的选择是CMake http://www.cmake.org/ or 自动工具 http://sources.redhat.com/autobook/。特别是如果您可以为多个架构/平台编译代码。我通常在本机上编译代码的子集以进行单元测试,并为目标平台编译所有代码。 CMake 处理这个问题特别好,因为它允许您指定交叉编译库所在的位置。因此,与其在 /usr/lib 中搜索交叉编译的 libpng,不如在 /opt/arm-eabi-gcc/ 或构建计算机上安装了工具链库的任何位置进行查找。您可以为不同的变体创建多个构建目录,并使用 make 手动编译每个变体,或者使用脑残的手动递归 make 来触发批次。

Ant 的缺点是它基本上与普通 Make 一样好或一样坏,还有一个缺点是您使用的东西对于 C 或 C++ 来说并不是特别主流。您必须处理自己的所有依赖项 - 包括内部依赖项,例如 C 文件到头文件到库或可执行文件,以及外部依赖项,例如必须与第 3 方库链接。另外,我认为 Ant C 任务并没有真正维护那么多。我见过的每个使用 Ant for C 的人都提倡使用 exec 任务调用 GCC。

SCons 更好,但交叉编译不是它的强项。它也不是像 CMake 或 Autotools 那样的“构建系统”,它只是一个构建工具。正如他们的维基上所说,这几乎是“用 Python 制作” http://www.scons.org/wiki/FrequentlyAskedQuestions#head-00ce208eece451fe9879c6f8dd1c45b56f4c76d1。不过,它确实内置了对依赖项的处理,这意味着您不必使用“gcc -MM -MD”或其他什么来自行构建依赖项,因此这比 Make 有优势。 SCons 还支持检测已安装的第 3 方库,但通常的完成方式会增加很多构建时间。与其他系统不同,SCons 在每次运行时都会运行检查阶段,尽管大多数结果都会被缓存。 SCons 还因其构建时间长而臭名昭著,尽管对于 50 个文件来说这不是问题。 SCons 中不存在交叉编译支持 - 你必须自己推出正如邮件列表中该主题所讨论的 http://thread.gmane.org/gmane.comp.programming.tools.scons.user/21036。通常,您会强制构建像 Unix 平台一样,然后覆盖 C 编译器的名称。构建多个变体或将构建目录与源目录分开充满了陷阱,这使得它不太适合交叉编译和本机编译代码。

CMake和Autotools很好地解决了依赖问题,并且autotools的交叉编译支持也很成熟。 CMake 自 2008 年 4 月发布的 2.6.0 版起就开始进行交叉编译。您可以免费获得这些功能,以及打包和运行单元测试(“make check”或类似目标)等其他功能。这两种工具的缺点是它们需要引导。对于 CMake,您需要安装 CMake 二进制文件才能创建 Makefile 或 Visual Studio 解决方案文件。对于 Autotools,情况稍微复杂一些,因为并不是每个编译软件的人都需要安装 automake 和 autoconf,只有那些需要更改构建系统的人才需要安装(添加新文件算作更改构建系统)。 2 阶段引导(configure.ac -> configure、configure + Makefile.in -> Makefile)在概念上有点难以理解。

对于编辑:交叉编译在构建系统中是一个额外令人头痛的问题,因为它增加了程序和库的自动检测的复杂性。 SCons 不处理这个问题,它让你自己解决。 Ant同样什么也不做。 Autoconf 在 autotools 情况下处理这个问题,但是当您配置时,您可能必须在命令行上提供“--with-libfoobar=/some/path”,或者在链接阶段尝试使用 /usr/lib 时面临损坏的链接。 CMake 的方法对于工具链文件来说有点重,但这意味着您不必指定所有工具和库(CC、CXX、RANLIB、--with-ibfoo= 等),因为它们是从标准约定。理论上,您可以在多个项目中重复使用适当制作的 CMake 工具链文件来交叉编译它们。在实践中,CMake 的普及程度还不足以让普通黑客感到方便,但如果您要创建多个专有项目,它可能会很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ant+cpptasks 与 scons 与 make 的相关文章

  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 如何在 makefile 中拥有正确的 .mod 顺序

    我正在尝试用 Fortran 为我的项目创建一个 Makefile 并使其可在现在的项目中重用 我经过多次尝试后得出的 Mkefile 如下 问题是它在少数情况下工作正常 但现在我有这个文件 main f90 初始 f90 参数 f90 函
  • 如何加密捆绑的文本/json 文件?

    我的 iOS 应用程序捆绑了几个文件 现在 如果有人下载该应用程序并访问 ipa 文件 他就可以轻松阅读它们 我想让事情变得更难 您知道有关该主题的任何资源吗 我想我需要一个加密库 以及编码文件的构建脚本中的一些脚本 当然 我知道有人可能会
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • 如何复制Makefile中的目录?

    我有一个目录images 我想复制到build images 从 Makefile 中 该目录可能包含多个级别的子目录 最优雅的方法是什么 我想 避免每个目录都复制完整的目录make运行 即不cp r 保证一致性 即如果文件在images
  • 使用 JAXB 扩展时获取“Provider x not a subtype”

    我之前发过帖子this https stackoverflow com questions 27977479 com sun tools xjc plugin provider plugin not a subtype 但我认为最好重新表述
  • 从 GNU Makefile 调用 `command -v find`

    我使用 shell bash 但我需要可移植性 和 GNU Makefile 我有这个代码 check commands command v find gt dev null command v asdf gt dev null 正如假设的
  • 如何将 Ant 路径转换为文件集?

    我正在编写一个 Ant 脚本来将项目打包到 WAR 文件中 该软件由多个项目组成 它们有自己的源目录 库等 WAR 任务有一个嵌套元素lib我目前正在研究这个问题 我目前有所需库的参考作为Path 包含几个FileSets 我在类路径引用中
  • make:仅针对单个目标禁用子目录中的并行构建

    我有一个相当庞大的由自动工具驱动的项目 它位于一个目录树中 该目录树由许多带有子目录的目录组成 它有一个目标check 在每个子目录以及主目录中 执行大量自动化测试 这check目标是递归构建的 并行构建和测试 通过 j选项 make 适用
  • Maven 或 Ivy 用于管理 Ant 的依赖关系?

    我想知道管理 ant 项目依赖关系的最佳方法 Maven Ant 任务和 Ivy 的优缺点是什么 由于您想要做的是将依赖项管理添加到现有的 Ant 项目中 这正是 Ivy 的设计目的 依赖管理是 Maven 的重要组成部分 但远非全部 Ma
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • makefile 中的预构建步骤

    如何运行必须在所有其他 makefile 命令之前执行的脚本 如果没有要构建的内容 则不执行脚本会很好 但不是强制性的 我搜索过 SO 和 Google 但找不到任何东西 我有这个解决方法 myscript bat output is em
  • 将 make 与 msysgit 一起使用

    我在 Windows 7 上使用 msysgit 但它似乎没有附带 make 有没有一种简单的方法可以让 make 在 msysgit 上运行 我找到了一个link to make exe http repo or cz w msysgit
  • cordova 添加平台 - 执行命令“ant”时出错

    在一开始的时候 我知道这个问题已经被问了太多次了 我检查了所有的答案 尝试了我发现的每一种组合和每一种解决方案 但到目前为止没有任何效果对我有用 问题 我已经成功安装了cordova 从官方网站下载了它 并且我一直在遵循指南 我已经添加wp
  • 链接 C 代码时如何判断符号的定义位置

    我面临着链接中特定符号的未定义参考问题 error undefined reference to g queue pop nth 我正在 LOP 和 ARM 平台上工作 我们在两个平台上使用相同的环境 我们的 ARM 构建可以毫无问题地链接
  • 排除jar中的文件进入apk

    我最近添加了一些新的罐子到我的android项目 一些 jar 包含 version properties 其中之一甚至包含 README TXT 我如何告诉 eclipse adt ant 排除文件进入 apk 显然我可以解压 apk 删
  • 如何获取 Visual Studio 的“发布”功能以包含生成后事件中的文件?

    我目前正在尝试使用 Visual Studio 2010 发布 和 MSDeploy 功能来处理我的 Web 部署需求 但在根据我的构建配置自定义包方面遇到了障碍 我在 32 位环境中开发 但需要为 64 位环境创建发布包 因此在 发布 配
  • 如何处理GNU make中的子make错误?

    我在 Makefile GNU 中使用子 make 但每当子 make 失败时 主 make 都会继续成功运行 我希望每当我的子 make 失败时我的主 Makefile 都会失败 我怎么做 all pushd STA DIR make c
  • 用于编译和运行 C++ 的 bash 脚本

    我正在尝试进入 C 但必须使用冗长的命令通过命令行运行东西很烦人 所以我想制作一个 bash 脚本来简化过程并运行这些命令 bin bash if 1 start then cd CCPP cd HelloWorld g Wall W We

随机推荐

  • 奇怪的行为:列表理解中的 Lambda [重复]

    这个问题在这里已经有答案了 在Python 2 6中 x for x in lambda m for m in 1 2 3 结果是 3 3 3 我期望输出为 1 2 3 即使使用非列表理解方法 我也会遇到完全相同的问题 即使在我将 m 复制
  • Quercus (Java) 比原生 PHP 更快吗?

    如果是这样 为什么 或者也许更好的问题是 何时 我发现了一些零散的评论 例如这个帖子 https stackoverflow com questions 777356 is quercus a viable replacement for
  • Karma、PhantomJS 和 es6 Promise

    我正在编写一个使用新的 es6 Promise 的 JavaScript 库 我可以在 Firefox 中测试该库 因为 Promise 已定义 但是 当我尝试使用 Karma 和 PhantomJS 测试我的代码时 出现错误Can t f
  • 错误问题:“访问路径 被拒绝。”

    我一直在寻找解决该错误的技巧 google stackoverflow com 等 但一切都不起作用 我需要通过 asp net 应用程序动态创建 aspx 文件 我为尝试修复它所做的事情 1 在文件夹的 属性 gt 安全性 中 我添加了
  • HTML5 视频自动播放,但有 5 秒延迟

    我的网页上有一个 20 秒长的 HTML5 视频循环作为背景 并将其设置为自动启动 视频自动播放可以延迟5秒吗 我试图在尝试播放之前让视频完全加载 以防止视频卡顿 这是我当前的代码
  • 对象方法调用不带括号

    导入后是否可以调用不带括号的对象方法 这是我的测试代码 基于本文 http www artima com scalazine articles package objects html马丁 奥德斯基 package gardening fr
  • 实体框架:获取不直接相关的对象

    我正在为我的 NET 应用程序使用实体框架 我也能够返回对象及其直接相关的对象 非常方便 但我在获取这些对象的对象时遇到问题 IEnumerable
  • 在 wpf 中运行视频

    我希望我的第一个项目以视频的形式实现 我该怎么做 我想播放视频 然后当我单击表单时 视频停止并且应用程序转到另一个页面 请帮我 尝试使用 MediaElement
  • Windows 8 - 自定义动态磁贴

    我们正在使用 C 开发适用于 Windows 8 的应用程序 我们的应用程序涉及用户创建的绘图 我们希望将他们的绘图合并到活动磁贴中 我找到了将文本和图片设置为应用程序的动态磁贴的示例 有没有办法做自定义的事情来渲染线条等 或者是通过将 P
  • Formvalidation.io - 无法读取 null 的属性“classList”

    使用 formvalidation io 时 我的控制台总是出现错误 我不知道这个错误的原因是什么 即使我使用后端验证 URL 我仍然会在某些网站上收到垃圾邮件 我正在使用隐形 ReCaptcha https formvalidation
  • 元素结束标记中的属性?

    执行以下操作是否被视为有效 li stuff li li stuff li li stuff 或者做属性have出现在开始标签中 不 不是 您必须在开始标记中使用属性 Running a test in w3c 验证器 http valid
  • 将 springboot 升级到 2.4.4 后,response.sendError(statusCode, "error message") 不起作用

    我在用AuthenticationEntryPoint处理身份验证问题 将异常原因传递给最终用户 response sendError responseCode errorReason 我最近将 Spring Boot 从 2 2 11 R
  • 类似 Javascript ||在 PHP 中 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 In javascript 我可以使用 例如这样的语句 window foo window foo 如果没有的话window foo它将被分配给
  • C++方法声明问题

    我在 Image cpp 中有一些代码 Image Image int width int height int depth m sFileName 0 and in Image h class Image public DrawAble
  • 调试使用 pm2 运行的应用程序

    应用程序由以下人员运行 pm2 start app js or pm2 start config json 我想使用 node inspector 在本地调试我的应用程序 我添加了debug争论 pm2 start node args de
  • UIBarButtonItem 图像应该有多大?

    我正在创建自己的自定义 按日期排序 和 按数字排序 按钮 我计划将它们作为右侧按钮放置在导航栏中 我的图像应该有多大才能适当地填充空间 UIBarItem https developer apple com documentation ui
  • 如何使用 php 在 XML 文件中进行搜索?

    不知道有没有办法在xml文件中搜索 例如 我想要得到Value使用Name from AttrList和产品代码 是否可以 这就是我的 xml 的样子
  • jQuery 将类添加到图像链接,而不会在链接传递变量时弄乱

    好的 所以我使用了一些 jquery 来选择所有 a 页面上的标签以及它们是否链接到图像文件以添加zoom出于灯箱的目的对其进行类处理 这是有效的代码 document ready function a href png a href gi
  • List<>.IndexOf 是按引用还是按值进行比较?

    List
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于