1

我正在阅读 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 条,难道不应该重新编译所有文件吗?

4

0 回答 0