咨询一个C++ 开发软件的 常见问题

世界银行 发布于 2013/08/14 10:05
阅读 659
收藏 0

C++ 开发桌面程序的时候,源码很多,每次编译调试都是全部源码编译,这样非常耗时。调试个东西非常不方便,尤其是类似java system.out.println这样的输出操作。

 

有没有什么机制是自动编译,或者局部编译某些文件直接使用(局部某几个文件编译后,点调试器还是会进行全部编译),具体怎么操作拿VS举例(不使用动态链接库和静态哭,因为源码里的代码会经常改变)。

还有一般团队开发中是什么样个流程。

加载中
0
小耶果
小耶果

1.组织好你的h文件.
2.在1的前提下使用预编译技术.

效果就是只编译你改动的cpp文件.

团队一般是每人负责一个模块,个人进行单元测试.提交到仓库后进行联合汇编(每日构建),然后自动化测试.这方面的经验和技巧可说的就太多了...


0
世界银行

引用来自“小耶果”的答案

1.组织好你的h文件.
2.在1的前提下使用预编译技术.

效果就是只编译你改动的cpp文件.

团队一般是每人负责一个模块,个人进行单元测试.提交到仓库后进行联合汇编(每日构建),然后自动化测试.这方面的经验和技巧可说的就太多了...


@小耶果 我想问的是比如我有10G的源码文件(都是逻辑代码,不能封装成链接库),我自己调试的时候是每次都编译吗,还是有其他的操作。

0
魔力猫
魔力猫
10G,你都折腾进什么乱七八糟了。你知道这是什么概念吗?
0
小耶果
小耶果

要不要重新编译取决于你改动文件对于其他文件对于其的依赖.(理论上是尽量少改动h文件).如果cpp包含h混乱,没有很好的组织引用,那么很可能改动cpp甚至h后重新编译导致"牵一发动全身"从而变成Rebuild All.不过话说10G源码不划分区块,模组,全部搞在一起我倒是没有见识过,估计VS都打不开...还是重新组织源码,按功能或者业务独立开来吧.

0
酱油哥
酱油哥
10G 我去 整个window操作系统都不到10G...
0
云松
云松
有些东西可以便成动态库啊。  你们给用户更新的时候是怎么更新?  
0
中山野鬼
中山野鬼

引用来自“魔力猫”的答案

10G,你都折腾进什么乱七八糟了。你知道这是什么概念吗?
哈。估计是那种全套底层库,包括源码,说明,还有跨平台以及不同版本。
0
中山野鬼
中山野鬼

引用来自“小耶果”的答案

要不要重新编译取决于你改动文件对于其他文件对于其的依赖.(理论上是尽量少改动h文件).如果cpp包含h混乱,没有很好的组织引用,那么很可能改动cpp甚至h后重新编译导致"牵一发动全身"从而变成Rebuild All.不过话说10G源码不划分区块,模组,全部搞在一起我倒是没有见识过,估计VS都打不开...还是重新组织源码,按功能或者业务独立开来吧.

估计他是有全套的平台源码。实际桌面假设基于x window的,基本从协议开始,最底层的都在里面了。
0
中山野鬼
中山野鬼

楼主给你个建议,除非你是一堆文件用vc这类ide开发的。就是ide把所有文件平铺起来的那种,我说ide傻叉,有些人不信。

你根据makefile的依赖关系,切成组建,套件,模块等等,或者根据你改动的文件的类的父类等分出层次出来。无所谓名称。

余下分三类,你改动代码依赖或继承的,这个可以先处理的。不需要你反复编译,链接是需要的。另一类是你改动的代码,这个什么头文件预编等也没有办法调整,你肯定要重编,而那些依赖你的改动,或者继承你的类的代码,可能你需要通过他们的测试来看你的代码的设计问题,则哪些要测试的,就调整哪些。不要测试的你不要处理,方法如下:

将你代码和头文件做两个版本。对于你测试不会关注的,调用老的。你测试改动,需要被关注的,则使用新的。这样折腾。处理完,整体再替换,随后用二分法做测试,就是说你代码改动测试完,对所有引用的地方进行全替换,如果出错,则退回,只修改一半的引用,最终锁定出错点。

别说面向对象了,就是我c语言,多个模块调用同一个模块,甚至有数据交互关联我也这么干,甚至新老版本都跑一遍,正好做对比测试。

说来说去,你需要对整个系统结构了解,否则什么方法都白搭。

至于自动编译仅改动的地方。这个需要通过makefile的依赖规则来确定。编译器不会帮你做的。但能有10 G的源码,很难想想没有makefile。

头预编译是编译器做的,可以提高性能,不过很多问题它还是解决不了,不是个治根的方法。简单一句话,折腾makefile吧。

返回顶部
顶部