Linux学习笔记-Makefile优化之头文件依赖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/81990046

如果头文件被更新,则包含了它的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)

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81990046