C++中的编译依存关系

toadzw 2008-10-30 05:26:12
当一个类中的哪些部分发生变化时,使用这个类的文件要求重新编译?共有成员,私有成员,共有函数,私有函数。。。。
...全文
103 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
andoneorzero 2009-08-26
  • 打赏
  • 举报
回复
to ls: 不用重新编译
toadzw 2008-10-31
  • 打赏
  • 举报
回复
好像要是重编译的
kiffa 2008-10-31
  • 打赏
  • 举报
回复
to ls: 你这结论怎么得来的???????????????

// book.h
class Book
{
public:
void Print();
}

// book.cpp
#include <iostream>
#include "book.h"
void Book::Print(){std::cout << "haha" << std::endl;}

// main.cpp
#include "book.h"
int main()
{
Book b;
b.Print();
}

main.cpp 引用了 book.h,如果book.h的实现部分发生变化,也就是book.cpp发生了变化,比如:
// book.cpp
void Book::Print(){std::cout << "xixi" << endl;}

那么main.cpp完全不需要重新编译,只需要重新编译book.cpp,然后链接main.o 和 book.o即可。

toadzw 2008-10-30
  • 打赏
  • 举报
回复
all wrong
头文件实现部分发生变化,而引用这个头文件的文件引要重新编译
kiffa 2008-10-30
  • 打赏
  • 举报
回复
楼主的意思大概是:通过 include 头文件来使用一个类,如果这个类的接口不变,只是内部实现发生了变化,那么使用这个类的文件就不需要重新编译,只需要重新编译一下类的实现文件,再链接这个文件就行了。

当然这和楼上各位所说的并不抵触。
帅得不敢出门 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyu637 的回复:]
一个文件就算没有发生实际内容的变化,
比如在无关处加个空格,也会引起文件的重编译,


决定重编译的条件一般是md5,或者是文件的最后修改时间,而不是具体的文件里的类,或者什么。


.h发生重编译的时候,一般可能引起的连锁反应会更多一些(其他文件也冲编译了)。
实际上在编译器的编译阶段,没有.h,和.cpp之分,都是.cpp的文件,

.h文件已经被编译器之前的操作,加到相应的。cpp文件里了。
[/Quote]
gcc查询的是时间
toadzw 2008-10-30
  • 打赏
  • 举报
回复
is?
General1982 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wlamos 的回复:]
更严格的说是所有直接、间接依赖于改变的头文件的文件都需要重新编译
[/Quote]
支持这个!
xhs_lh04 2008-10-30
  • 打赏
  • 举报
回复
文件没改变不用重新编译,文件改变了就应该重新编译,跟类没关系吧
wuyu637 2008-10-30
  • 打赏
  • 举报
回复
一个文件就算没有发生实际内容的变化,
比如在无关处加个空格,也会引起文件的重编译,


决定重编译的条件一般是md5,或者是文件的最后修改时间,而不是具体的文件里的类,或者什么。


.h发生重编译的时候,一般可能引起的连锁反应会更多一些(其他文件也冲编译了)。
实际上在编译器的编译阶段,没有.h,和.cpp之分,都是.cpp的文件,

.h文件已经被编译器之前的操作,加到相应的。cpp文件里了。
wlamos 2008-10-30
  • 打赏
  • 举报
回复
更严格的说是所有直接、间接依赖于改变的头文件的文件都需要重新编译
wlamos 2008-10-30
  • 打赏
  • 举报
回复
跟哪部分没有关系,头文件中的东西发生了变化,那么所有包含这个头文件的文件都需要重新编译。
如果是一个cpp文件发生了变化,则只重新编译该文件即可

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧