从零开始学习makefile(2)自动推导

21 篇文章 2 订阅

makefile在编译c++代码时,默认xxx.o文件是依赖xxx.cpp/c文件的,并且自动准备好了从cpp编译.o文件的指令。所以这部分文字是可以省略的。

目录

最简单的情况:

 并不单纯的情况(.o不仅依赖.cpp,也依赖其他文件):

引入macro.h

 修改macro.h


 

最简单的情况:

看下面的makefile和main.cpp

按理说,main.o对main.cpp的依赖应该明确的写在makefile里面。但是makefile的自动推导允许你省略这句话

CC := g++

main : main.o
	${CC} -o main main.o
#main.o : main.cpp
#	${CC} -o main.o -c main.cpp

.PHONY : clean
clean :
	rm *.o main
#include <iostream>
//#include "macro.h"

int main(void){
   //std::cout<<PI<<std::endl;
   std::cout<<"end"<<std::endl;
   std::cin.get();

   return 0;
}

效果:

5366a122f07943b9809a826544aed971.png

 并不单纯的情况(.o不仅依赖.cpp,也依赖其他文件):

引入macro.h

现在main.o不仅依赖一个main.cpp,还依赖macro.h。所以makefile里面要把main.o对macro.h的依赖加上,但是仍不需要添加对main.cpp的依赖:

macro.h

#define PI 3.14159

main.cpp

#include <iostream>
#include "macro.h"

int main(void){
   std::cout<<PI<<std::endl;
   std::cout<<"end"<<std::endl;
   std::cin.get();

   return 0;
}

makefile

CC := g++

main : main.o
	${CC} -o main main.o
main.o : macro.h
#	${CC} -o main.o -c main.cpp

.PHONY : clean
clean :
	rm *.o main

编译运行正常:

152a1c13e6b746c08475e87ebfdb8040.png

 修改macro.h

把PI改为3.14。此时makefile里定义了main.o对macro.h的依赖,所以运行make指令会触发对main.o的再次编译:

be81936eb9624bc7a351a54ca017036e.png

 可见,输出变成了3.14。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值