当前位置:  技术问答>linux和unix

关于修改.h文件以后,是否需要重新编译的问题

    来源: 互联网  发布时间:2016-05-06

    本文导语:  由于我的MAKEFILE的依赖行没有写的好, 只依赖于.cpp文件,没有依赖于.h文件。 所以经常修改了动态库的.h文件以后,需要make clean;make ;重新编译所有程序。 --------- 想请问一下,有的仁兄说,如果只是在动态库的.h...

由于我的MAKEFILE的依赖行没有写的好,
只依赖于.cpp文件,没有依赖于.h文件。

所以经常修改了动态库的.h文件以后,需要make clean;make ;重新编译所有程序。


---------
想请问一下,有的仁兄说,如果只是在动态库的.h文件中只是新增加函数,或新增加定义,没有修改旧函数的时候,可以不需要全部编译所有程序。不知道是否是正确的。

|
晕死,明明是需要重新编译的,不重新编译是有风险的
这个没有很好的解决方法,只能手工把.h文件加到makefile中去
如果使用了规则的甚至要写成这样
%.o:%.c a.h b.h
这时候麻烦就是修改了一个头文件会重新编译所有的源代码

如果只是在动态库的.h文件中只是新增加函数,或新增加定义,没有修改旧函数的时候,可以不需要全部编译所有程序。不知道是否是正确的。

这种说法直觉上有问题,不过一时也没想到什么太大的毛病,考虑以下情况
新增加一个定义在a.h中
#define debug 1
另外有个老的b.h中有以下内容
#ifdef debug
.....
那么包含了a.h和b.h的源文件都需要重新编译

就我个人意见,不重新编译是有风险的,重新编译所有包含了此头文件的源文件应该是必要的。

|
按1楼的说法你说的情况不存在,没有任何险


|
如果只改动a.h文件,且改动不对a.cpp造成影响, 对应的a.cpp文件应该是不需要重新编译的.

|
确实,无需再次编译,我的经验

|
理解了编译跟链接的不同就很好理解为什么不需要重新编译了。

|
直接automake ,这么费事,能看得懂Makefile就可以的了。过来人的意见。


|
反对

|
头文件更新,而这个头文件被C源文件包含的话,这些C源文件就要被重新编译,我觉得,不管是新增函数,还是修改函数,反正头文件是被改了

|
只要头文件的修改不影响到源文件,就可以不得新编译源文件而不管源文件是否包含了此头文件。


    
 
 

您可能感兴趣的文章:

  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 修改内核代码问题:如何编译修改的单个文件而不用重建整个内核?
  • 编译完内核后如何修改grub.conf文件是修改生效
  • linux 代码修改后编译
  • 如何重新编译修改后的Linux内核源代码?
  • 头文件修改后为什么不会重新编译
  • 自己编写一个程序编译进内核,要修改makefile文件吗?
  • 不重新编译内核能修改内核函数吗?
  • 请帮忙看看这个编译错误信息是什么意思,该怎么修改?谢谢
  • 在 JBuilder 6 中,如何修改设置使得编译时支持 -deprecation 选项?
  • 如何修改libnids的makefile文件,让编译生成的库文件放在本地路径
  • 请教:修改Linux内核时,需要调用驱动程序的函数,头文件也包含了,但是编译时候说头文件找不到!
  • 修改内核的编译的问题(说完再加分)
  • 请问这段程序应该怎么修改阿,为什么老是编译不过去?
  • linux源码修改和编译
  • 请教下关于root密码忘记了怎么修改(除了去现场单用户修改) iis7站长之家
  • 一个程序编译出错 帮忙看看怎么修改
  • 移植opencv2.0时编译出错,请教如何修改。
  • 【急!】如何修改makefile文件,使程序每次编译时都include一个.h文件
  • shell 程序监控网站网页是否被修改,如果被修改停止服务器的运行?
  • 在线等待:在Java中是否有权限修改一个文件的权限?
  • 驱动程序是否需要修改呢?帮顶有分
  • 如何判断文件夹下的文件是否被修改
  • 在一个进程中我定义了几个全局变量,然后我又fork了几个子进程,子进程中是否可以各自对全局变量进行修改,如果各子进程都对其进行修改,
  • gdb在调试过程中是否可以修改代码,比如加句printf()
  • linux下是否有配置文件修改键盘布局?
  • IP包头在经过路由转发时是否会被修改
  • Shell脚本实现检测文件是否被修改过代码分享
  • 请教高手,通过ssh连接suse linux的三种方式是否可以修改?
  • 想知道一个网页的修改日期好判断是否更新
  • 使用tomcat4.0.3,当服务器启动装载servlet后,如果servlet有些修改,是否需要重新启动tomcat?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改Windows硬盘分区名称
  • unix 下 C++实现 ftp 到另一台主机上 修改文件内容 !能不能直接在主机上修改 还是只能get下来本地修改完后 在put上去
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 高手帮帮忙!!! 在线等!!outlook的附件修改且保存后,再次打开发现是修改之前的原件
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 修改ip地址的话应该修改/ect下哪个文件里的内容?
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 原密码被人恶意修改,如何修改suse系统的超级用户密码(急)
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 有什么命令可以修改整个目录下文件的最后修改时间?
  • 通过docker commit命令保存对docker容器的修改
  • 请教一下,如何修改ubuntu命令,使其可以直接修改kvm虚拟机配置
  • linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  • 请教下关于root密码忘记了怎么修改(除了去现场单用户修改)
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  • [fedora]下怎么修改MAC地址,并且要重新动的时候还是修改后的值。
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • 哪个DOS命令可以修改指定文件的时间(修改时间)?
  • ◆◆◆◆遇到这样一个问题,请帮忙修改修改.
  • 本来可以修改skb里tcp数据的,突然不能修改了,为什么?
  • 急,请问如何修改网络接口eth为其它名称,如网络接口为abc0, abc1,要修改哪个配置文件?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3