有效的c ++项目31:重新编译

时间:2016-10-04 00:09:37

标签: c++ compilation effective-c++

我正在阅读Effective C ++第31项:最大限度地减少文件之间的编译依赖性。

它说:
enter image description here

我用下面的代码做了一点测试:

// 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,那么不应该重新编译所有文件吗?

0 个答案:

没有答案