我正在阅读Effective C ++第31项:最大限度地减少文件之间的编译依赖性。
我用下面的代码做了一点测试:
// A.H
#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编译它们。然后我对课程A
做了一些更改。例如,添加一些新数据和成员函数,更改getInt()
的值。我重新编译它们
但是,我发现只有A.cpp被重新编译。
这是我的makefile:
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,那么不应该重新编译所有文件吗?