makefile简单的笔记

初步:

main:main.o func.o
    gcc mian.o func.o -o main   #生成main函数
main.o:mian.c
    gcc -c main.c -o main.o     #生成main.o
func.o:func.c
    gcc -c func.c -o func.o     #生成func.o
.PHONY:rebuild clean            #.PHONY习惯作伪目标的标记
rebuild:clean main              #重新生成项目的伪目标
clean:                          #清除文件的为目标                                                               
    rm -f main.o func.o main

使用变量改进:

exe:=main                       #定义变量:目标exe:main.c
objs:=main.o func.o             #定义变量:obj文件
$(exe):$(objs) 
    gcc $^ -o $@                #生成main函数
%.o:%.c
    gcc -c $^ -o $@             #生成main.o和func.o
.PHONY:rebuild clean            #.PHONY习惯作伪目标的标记
rebuild:clean main              #重新生成项目的伪目标
clean:                          #清除文件的为目标
    rm -f $(objs) $(exe)                          

使用makefile内的函数改进:

exe:=main                       #定义变量:目标exe:main.c
srcs:=$(wildcard *.c)           #使用wildcard函数,匹配正则表达式内的变量
objs:=$(patsubst %.c,%.o,$(srcs))#定义变量:各个obj文件;patsubst(pattern,replaced,str)函数可以按正则表达式替
$(exe):$(objs)                                         
    gcc $^ -o $@                #生成main函数
%.o:%.c
    gcc -c $^ -o $@             #生成main.o和func.o
.PHONY:rebuild clean            #.PHONY习惯作伪目标的标记
rebuild:clean main              #重新生成项目的伪目标
clean:                          #清除文件的为目标
    rm -f $(objs) $(exe)

 

makefile的for循环,生成目录.c对应的程序:

srcs:=$(wildcard *.c)                           #定义源代码的列表
  2 exe:=$(patsubst %.c,%,$(srcs))                  #从源代码列表截掉.c,生成exe的文件名
  3 make_all:$(exe)                                 #伪目标,目的是生成列表对应的程序
  4     for i in $(exe);do gcc $$i.c -o $$i;done    #$$i相当于exe                                               
  5 .PHONY:clean rebuild
  6 rebuild:clean make_all
  7 clean:
  8     rm -f $(exe)

 

posted on 2021-02-22 22:18  平ping  阅读(83)  评论(0)    收藏  举报