如果头文件被更新,则包含了它的cpp文件应该被重新编译。
比如first里面有个函数,main函数调用了first里面的函数,那么first.h变化了,main肯定要重新编译
这里有个知识点:
-MMD 【这是编译器使用的选项】
g++/gcc 编译xxx.cpp文件时,可以提取里面的头文件
如下面的这个main.cpp源码:
#include "first.h"
#include "second.h"
#include <stdio.h>
int main() {
firstPrint();
secondPrint();
printf("main called!\n");
return 0;
}
他用了first.h和second.h
从这里就可以看到了!!!!!main.o依赖main.cpp first.h second.h,这条
这里介绍一个指令:
-include $(XXXX) 将所有的.d文件包含进来
所有有下面这个Makefile
EXE=helloworld
CPP_SOURCES=$(wildcard *.cpp)
CPP_OBJECT=$(patsubst %.cpp, %.o, $(CPP_SOURCES))
DEP_FILES=$(patsubst %.o, %d, $(CPP_OBJECT))
$(EXE): $(CPP_OBJECT)
g++ $(CPP_OBJECT) -o $(EXE)
%o: %.cpp
g++ -c -MMD $< -o $@
-include $(DEP_FILES)
clean:
rm -rf *.o *.d $(EXE)
运行截图如下:
EXE=helloworld
CPP_SOURCES=$(wildcard *.cpp)
CPP_OBJECT=$(patsubst %.cpp, %.o, $(CPP_SOURCES))
DEP_FILES=$(patsubst %.o, %d, $(CPP_OBJECT))
$(EXE): $(CPP_OBJECT)
g++ $(CPP_OBJECT) -o $(EXE)
%o: %.cpp
g++ -c -MMD $< -o $@
-include $(DEP_FILES)
clean:
rm -rf *.o *.d $(EXE)