有时,当我查看我的头文件时,我想在(doxygen)文档中添加一些内容。这可能是关于使用某些函数参数的快速说明,或者只是修正了一点错误。
但是我认为:哦不,这将触发下一次make
电话的重新编译!对于某些基本标题,整个项目将重新编译,这可能需要很长时间。所以,没关系!
这种困境是否有解决方案?是否存在不直接在头文件中记录函数/类的方法?或者是否有(计划)聪明的make
会注意到只有一些评论发生了变化,但是不需要重新编译?
答案 0 :(得分:6)
您可以使用ccache缩短编译时间,可能设置CCACHE_UNIFY
环境选项。
ccache对预处理器输出进行哈希处理,如果未检测到任何更改,则提供先前编译的对象。
关于CCACHE_UNIFY的手册页部分
<强>
CCACHE_UNIFY
强>如果您设置环境变量
CCACHE_UNIFY
,那么ccache 在散列预处理器输出时将使用C / C ++统一器 如果在编译中没有使用-g。统一者比a慢 普通哈希,所以设置这个环境变量会失去一点 有点速度,但这意味着ccache可以利用不 当源代码的更改包含时重新编译 仅重新格式化。请注意,使用CCACHE_UNIFY
会更改 hash,因此无法使用具有CCACHE_UNIFY
set的缓存编译 未设置CCACHE_UNIFY
时,反之亦然。统一的原因 默认是关闭它可以给出错误的行号 编译器警告消息中的信息。
答案 1 :(得分:3)
如何检查(你做版本控制,不是吗?)代码库的另一个副本在另一个目录中,只是为了进行这些编辑?
它可以是一个单独的分支,也可以不是。然后,当你发生这些微小的变化时,你只需要在这里制作它们。您可以直接提交它们:现在它们处于安全的地方,不会影响您的实际开发。每隔一段时间,如果您的构建时间真的那么长,就像每周一次,您可以将这些更改合并到您正在处理的内容中。只要您在一个目录中记录并在另一个目录中编写代码,就很少发生合并冲突。
答案 2 :(得分:2)
为什么不将touch文件带回到make不会认为它改变的时间?
正如onebyone建议你可以把它包装成一个简单的脚本。
答案 3 :(得分:1)
严格按照文件的时间戳进行工作,并且绝对没有计划将其延伸过去。除了C之外,make用于很多东西,并且对文件的内容一无所知。如果make必须分析更改,你的构建可能会慢得多。
您可以将文档保存在头文件之外,只保存在.c文件中,这将限制需要重新编译的内容。我承认,我个人更喜欢在头文件中记录“界面”功能,但从doxygen的角度来看,这并不重要。
正如另一个人所建议的那样,您可以通过使用“触摸”来回溯文件来绕过此系统。
doxygen会让你把评论放在外部文件中,但这通常是一个不可取的解决方案; doxygen的重点之一就是保持文档靠近源。
否则,我建议你更快地修改你的编辑......你真的不应该害怕它们。
答案 4 :(得分:0)
只需进行更改,然后接受重新编译即可。当开发人员害怕恭维时,实际上不可能有一个功能开发环境;也许您需要研究一个可以缩短编译时间的分布式网格编译系统?
答案 5 :(得分:-2)
我的解决方案是不要在Makefile中包含头作为依赖项...因此对头文件的更改不会通过“make”触发任何重新编译。
当然,缺点是如果我做了一个影响内存布局的更改(例如向类中添加成员变量),我需要记住手动触摸受影响的.cpp文件(或者如果它太难以理解哪个cpp文件受影响,做一个“make clean; make”),这可能有点容易出错...但它通常对我有用。