我正在阅读 Effective C++ Item 31: Minimize compiler dependencies between files。
我用下面的代码做了一个小测试:
//啊
#ifndef A_H
#define A_H
#include <iostream>
class A
{
public:
A();
int getInt();
int i;
};
#endif
//A.cpp
#include "A.h"
A::A():i(97)
{}
int A::getInt()
{
return 2;
}
//TestA.h
#include "A.h"
class TestA
{
public:
TestA();
int getInt();
A a;
};
//TestA.cpp
#include "TestA.h"
TestA::TestA():a(A())
{}
int TestA::getInt()
{
return a.getInt();
}
我有三个类,如TesetA
.
首先我用makefile编译它们。然后我为 class 做一些改变A
。例如,添加一些新的数据和成员函数,更改getInt()
. 我重新编译它们。
但是,我发现只有 A.cpp 被重新编译。
这是我的生成文件:
ibcpp=-std=c++11 -stdlib=libc++
all: res.out
res.out: main.o FactoryA.o TestA.o TestB.o A.o
g++ $(libcpp) main.o FactoryA.o TestA.o TestB.o A.o -o0 res.out
main.o: main.cpp
g++ $(libcpp) -c main.cpp -O0 -o main.o
FactoryA.o: FactoryA.cpp
g++ $(libcpp) -c FactoryA.cpp -O0 -o FactoryA.o
TestA.o: TestA.cpp
g++ $(libcpp) -c TestA.cpp -O0 -o TestA.o
TestB.o:TestB.cpp
g++ $(libcpp) -c TestB.cpp -O0 -o TestB.o
A.o: A.cpp
g++ $(libcpp) -c A.cpp -O0 -o A.o
现在我很困惑。如果我正确理解了第 31 条,难道不应该重新编译所有文件吗?