我想用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(使用前将#替换为@)