完美的makefile

2023-12-28

我想用make http://en.wikipedia.org/wiki/Make_%28software%29结合获得模块化构建持续集成 http://en.wikipedia.org/wiki/Continuous_integration, 自动单元测试 and 多平台构建。类似的设置在 Java 和 .NET 中很常见,但我很难将其组合到 make 和 C/C++ 中。如何才能实现呢?

我的要求:

  • 快速构建;非递归make(堆栈溢出问题您对非递归 make 有什么经验? https://stackoverflow.com/questions/559216)
  • 模块化系统(即最小依赖关系,makefile 位于带有组件的子目录中)
  • 多平台(通常用于单元测试的 PC,用于系统集成/发布的嵌入式目标)
  • 完整的依赖性检查
  • 执行(自动)单元测试的能力(敏捷工程)
  • 挂钩持续集成系统
  • 便于使用

我已经开始了非录音制作 http://code.google.com/p/nonrec-make。我仍然认为这是一个很好的起点。

到目前为止的限制:

  • 没有集成单元测试
  • 基于 Windows 的 ARM 编译器与 Cygwin 路径不兼容
  • makefile 与 Windows \ 路径不兼容
  • 前向依赖

我的结构如下:

    project_root
       /algorithm
                 /src
                     /algo1.c
                     /algo2.c
                 /unit_test
                     /algo1_test.c
                     /algo2_test.c
                 /out
                     algo1_test.exe
                     algo1_test.xml
                     algo2_test.exe
                     algo2_test.xml
             headers.h
       /embunit
       /harnass
   makefile
   Rules.top

我想让事情变得简单;这里的单元测试(algo1_test.exe)取决于“算法”组件(ok)和单元测试框架(在构建此框架时可能知道也可能不知道)。然而,将构建规则移至顶层对我来说并不有吸引力,因为这会在整个系统中分发组件的本地知识。

至于 Cygwin 路径:我正在努力使用相对路径进行构建。这解决了/cygdrive/c问题(因为编译器通常可以处理 / 路径)而不引入 C: (这让人不喜欢)。还有其他想法吗?


CMake http://cmake.org/与相关工具 CTest 和 CDash 一起似乎可以满足您的要求。值得一看。

Bill Hoffman(首席 CMake 开发人员)指的是递归使得被认为是有害的 http://miller.emu.id.au/pmiller/books/rmch/纸在一个post http://www.cmake.org/pipermail/cmake/2004-January/004705.html在 CMake 邮件列表中:

...由于 cmake 正在为您创建 makefile,因此许多缺点 避免递归 make,例如您不必调试 makefile 甚至思考它们是如何工作的。还有其他例子 cmake 也为您修复了那篇论文中的内容。

也可以看看这个答案 https://stackoverflow.com/questions/319764/recursive-make-friend-or-foe/320585#320585对于“递归结交——朋友还是敌人?”这里在 stackoverflow 上。

- 递归结交——朋友还是敌人? https://stackoverflow.com/questions/319764/recursive-make-friend-or-foe

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

完美的makefile 的相关文章

随机推荐

  • 有趣的 SQL 连接日期之间的日期

    首先 感谢任何帮助我解决这个问题的人 我使用的是 SQL 2005 但如果 05 中没有可用的解决方案 可以使用 2008 我有一行数据 如下所示 select from mySPtable myPK Area RequestType St
  • 可靠地显示 matplotlib(0.99 到 1.3.1)数字而不会阻塞

    有没有办法在 Python 2 65 Matplotlib 0 99 中显示 pyplot 图 而不锁定其他所有内容 我有一个带有 Pmw GUI 的程序 在 Python 2 75 和 Matplotlib 1 3 1 上运行 在 Win
  • AppCertDlls:病毒导致 Win32 上的进程创建速度减慢

    大约两个月来 我在 Windows XP Home SP3 上遭受了严重的进程创建惩罚 这个问题在创建大量进程的任务中最为明显且烦人 例如 shell 脚本 顺便说一句 Cygwin 上的 bash 脚本 Makefile 或解压 IzPa
  • 增强导入的打字稿界面

    我正在使用一个包 ko 组件路由器 https github com Profiscience ko component router 具有以下 简明 类型定义 索引 d ts export IContext Context from co
  • Angular 2 中 JavaScript 堆内存不足

    我正在使用 Angular CLI 请检查我的 CLI 信息 angular cli 1 2 1 node 6 10 0 os win32 x64 angular animations 4 1 1 angular common 4 0 0
  • EF 7:如何加载一对多关系中的相关实体

    我有以下代码 为什么我的导航属性 课程中的要求和要求中的课程 为空 public class Course AbsEntity Key public string Title get set public string Term get s
  • 问:R 中的 KNN——奇怪的行为

    有谁知道为什么下面的 KNN R 代码对不同的种子给出不同的预测 这很奇怪 因为 Kpost library class set seed 642002713 m 20 n 1000 from 2 30 to from train matr
  • 如何使用Python在Telegram机器人中发送表情符号?

    我正在处理一个小项目 我决定添加表情符号以使视觉效果更好一点 但我无法发送它 我尝试过像 U000203C 这样的 Unicode 甚至尝试复制表情符号并粘贴它 但仍然无法做到 有什么办法可以发送表情符号吗 Unicode exchange
  • 如何打开 VS Code 并通过 CLI 将命令传递到集成终端

    我想知道如何使用code命令打开VS Code与综合终端 https code visualstudio com docs editor integrated terminal启动时运行一些我直接传递到集成终端的命令 现在我需要采取一些行动
  • boost::ref 没有发生匹配的调用错误,但 std::ref 则没有发生匹配的调用错误

    我编写了一些代码 它使用函子和ref and bind模板来自boost or std 对于 C 11 命名空间 我正在使用一个 define之间切换boost and std 命名空间 我使用的是 boost 版本 1 53 我的编译命令
  • Pyinstaller 可执行文件导入 torchvision 失败

    这是我的main py import torchvision input Press key 它在命令行中正确运行 python main py 我需要一个适用于 Windows 的可执行文件 所以我做了 pyinstaller main
  • 更改asp图表图例标签宽度

    Aspx
  • Fancybox2:修改对多个画廊的呼吁

    我正在生成一个 HTML 页面 其中包含来自 MySQL 数据库中保存的信息的多个画廊 我需要修改 Fancybox2 调用 如下所示 document ready function a rel gall24 a rel gall30 et
  • 显示 (head .unit ) = Agda 中的 head

    我试图证明 Agda 中的一个简单引理 我认为这是正确的 如果向量有两个以上元素 则取其head继采取init与取其相同head立即地 我将其表述如下 lem headInit l xs Vec suc suc l gt head init
  • 在 Doctrine 中,如何忽略更新架构命令中的特定列?

    我有我的映射实体 named Product 只有两列 id and name 如果我手动添加另一列 即stock qty直接使用SQL语句 架构更新工具将远程它 当然 如何防止 Doctrine 删除我的自定义列 而不是映射到我的实体 相
  • 如何在 HTTP 查询字符串中发送 NULL?

    我正在开发一个 API 它可以接受主要三种数据类型作为查询字符串参数的值 boolean string numeric integer or float 默认情况下 所有内容都以字符串检索 我认为没有办法解决这个问题 但参数配置了类型 以便
  • 拥有大量小方法是否有助于 JIT 编译器优化?

    在最近关于如何优化某些代码的讨论中 我被告知将代码分解为许多小方法可以显着提高性能 因为 JIT 编译器不喜欢优化大型方法 我对此不确定 因为似乎 JIT 编译器本身应该能够识别独立的代码段 无论它们是否在自己的方法中 谁能证实或反驳这一说
  • 检查 NSDictionary 中是否存在键

    我如何检查它是否存在 dataArray objectAtIndex indexPathSet row valueForKey SetEntries 我想知道这个密钥是否存在 我怎样才能做到这一点 非常感谢 编辑 dataArray 中有对
  • 如何使 ttk.Scale 表现得更像 tk.Scale?

    Ttk 版本中还存在一些 Tk 小部件 通常它们具有相同的一般行为 但使用 样式 和 主题 而不是每个实例的外观属性 例如bg ETC 这很好 因为 Ttk 小部件默认采用操作系统窗口管理器的 标准外观 无需配置任何有关外观的内容 然而 由
  • 完美的makefile

    我想用make http en wikipedia org wiki Make 28software 29结合获得模块化构建持续集成 http en wikipedia org wiki Continuous integration 自动单