makefile文件编写

本文详细介绍了Makefile的基本语法和编写规则,包括目标文件与依赖文件的关系、编译规则的设定以及特殊符号如$@、$^、$<的用法。通过三个实例,展示了如何组织和简化Makefile,以便于管理C/C++项目的编译过程,包括源文件的自动发现和目标文件的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

makefile文件编写


基本语法

target: components   目标文件: 依赖文件
         comand                (tab)编译规则
        
        
        
例子1:

SRC_O :main.o mytool1.o mytool2.o 

main:$(SRC_O)
       gcc -o main $(SRC_O) 
       
main.o:main.c mytool1.h mytool2.h 
       gcc -c main.c 
       
mytool1.o:mytool1.c mytool1.h 
       gcc -c mytool1.c 
       
mytool2.o:mytool2.c mytool2.h 
       gcc -c mytool2.c
       
clean:     
       rm -rf *.o main
    
    
规则   
$@       目标文件   

 $^         所有的依赖文件  

 $<        第一个依赖文件
       
简化后:
main:main.o mytool1.o mytool2.o
  gcc -o $@ $^
.c.o:
  gcc -c $<
clean:
      rm -rf *.o main
      
      
      
例子2:
main:main.o add.o mul.o sub.o div.o
    g++ -o main add.o mul.o sub.o div.o main.o
main.o:main.cpp
    g++ -c -I ../include main.cpp
add.o:add.cpp ../include/head.h
    g++ -c -I ../include add.cpp
mul.o:mul.cpp ../include/head.h
    g++ -c -I ../include mul.cpp
sub.o:sub.cpp ../include/head.h
    g++ -c -I ../include sub.cpp
div.o:div.cpp ../include/head.h
    g++ -c -I ../include div.cpp
.PHONY:clean
clean:
    rm -f *.o
    
    
#获取.cpp文件
#wildcard函数,就是获取指定的文件
SrcFiles=$(wildcard *.cpp)  
#使用替换函数获取.o文件
#patsubst函数,有替换功能。
ObjFiles=$(patsubst %.cpp,%.o,$(SrcFiles))
#生成的可执行文件
all:main
#目标文件依赖于.o文件
main:$(ObjFiles)
    g++ -o $@ -I ../include $(SrcFiles)
#.o文件依赖于.cpp文件,通配使用,一条就够
%.o:%.cpp
    g++ -c -I ../include $<

.PHONY:clean all

clean:
    rm -f *.o
    
$(Files),取File变量的值。
$@ 目标文件
$^ 全部依赖
$< 第一个依赖
$? 第一个变化的依赖

 

例子3:

src = $(wildcard ./*.c)  #获取当前.c文件
obj = $(patsubst %.c, %.o, $(src))   #patsubst 替换通配符, 代表将src里的每个文件都由.c替换成.o。函数执行结束后,obj的值为main.o fun1.o fun2.o,其实跟第三版Makefile的obj值一模一样,只不过在这里它更智能一些,也更灵活。
#obj = $(src:%.c=%.o)  这样写也行
target = app  
CC = gcc  

$(target): $(obj)  
    $(CC) $(obj) -o $(target)  

%.o: %.c  
    $(CC) -c $< -o $@  

.PHONY: clean  
clean:  
    rm -rf $(obj) $(target)



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值