只需添加一些文档就会触发重新编译:是否有解决方案?

时间:2009-07-12 15:06:09

标签: c++ documentation makefile header

有时,当我查看我的头文件时,我想在(doxygen)文档中添加一些内容。这可能是关于使用某些函数参数的快速说明,或者只是修正了一点错误。

但是我认为:哦不,这将触发下一次make电话的重新编译!对于某些基本标题,整个项目将重新编译,这可能需要很长时间。所以,没关系!

这种困境是否有解决方案?是否存在不直接在头文件中记录函数/类的方法?或者是否有(计划)聪明的make会注意到只有一些评论发生了变化,但是不需要重新编译?

6 个答案:

答案 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”),这可能有点容易出错...但它通常对我有用。