Я читаю Effective C ++ Item 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
,
Сначала я компилирую их с помощью make-файла. Затем я делаю некоторые изменения для класса A
, Например, добавьте некоторые новые данные и функции-члены, измените значение getInt()
, Я перекомпилирую их.
Однако я обнаружил, что только A.cpp был перекомпилирован.
Вот мой make-файл:
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, не следует ли перекомпилировать все файлы?
Задача ещё не решена.
Других решений пока нет …