浅谈Makefile,Makefile万能模板

简介: 浅谈Makefile,Makefile万能模板

Makefile

**

简单写makefile

main:main.o main.h 1.o 1.h
    gcc main.o 1.o -o main 

main.o: main.c main.h
    gcc main.c -o main.o -c

1.o:1.c 1.h
    gcc 1.c -o 1.o -c

解释:

以上例子中:

第一执行make:最终目标是main,main目标文件不存在,需要根据后面的依赖文件和规

则生成main但是main.o及1.o这些依赖不存在,ok,make会去往下找生成main.o和1.o的

生成规则。 先找到main.o,main.o生成依赖main.c和main.h,这两个存在,根据下面的规则

编译生成main.o,还差1.o,继续往下找,同上理生成1.o。这些main目标的依赖文件都有了,

最后使用第一条规则生成main可执行程序。


第二次及后续执行make:查看第一个目标,对比所有目标文件和依赖文件,如果有任何一

个依赖文件的修改时间比目标文件的修改时间新,则执行其对应规则。过程如上,最终完成

更新后最终目标文件的生成。make的这一规则减少了对已编译未更新文件的时间花费。提

高了编译链接速度。

-------------简易版万能Makefile-------------

CFLAG:= -I./inc   #编译参数 可以指定头文件的外在加载路径
          #inc是存放头文件得到文件夹
TARGET:= project
source:= $(wildcard ./src/*.c) #先获取src下面的所有.c文件字符串 放在source中
source+= $(wildcard ./apd/*.c) #再追加添加apd下所有.c文件
Source1:= $(patsubst %.c,%.o,$(source)) #把.c文件按照%c格式替换为%.o格式的.o文件放在objs变量中

$(TARGET):$(Source1)    #把所有.o文件链接生成可执行文件project
  gcc $^ -o $@ $(CFLAG)
 
 %.o:%.c    #把所有的.c文件编译生成.o文件
  gcc -c $^ -o $@ -g $(CFLAG)

.PHONY: clean       #声明后面clean为伪目标
clean:
    rm $(Source1) $(TARGET)
pri:
  @-echo $(Source1) 

wildcard函数:

使makefile中的变量能识别通配符,否则通配符只能在规则命令那里使用

$(wildcard 参数)

函数功能:能够识别参数的通配符 并转换为字符串


例程:

模板:-----> 加载当前目录下的C文件,也可以加载其他目录下的C文件

SOURCES := $(wildcard ./.c)

SOURCES += $(wildcard ./src/.c)

OBJS := ( p a t s u b s t (patsubst %.c,%.o,(patsubst(SOURCES)) #得到对应欲编译生成的*.o目标文件列表


相关文章
|
7月前
|
Shell Linux C++
Makefile编译实战
Makefile编译实战
94 0
|
C语言
Makefile教程(Makefile的结构)
Makefile教程(Makefile的结构)
109 0
|
7月前
|
编译器 测试技术
如何编写自己的Makefile(1)
如何编写自己的Makefile(1)
34 1
|
IDE 编译器 程序员
编写Makefile
编写Makefile
63 0
|
IDE Linux Shell
【Makefile】简单的Makefile编写
【Makefile】简单的Makefile编写
|
Shell Linux C语言
Makefile文件 | 编写指南
Makefile文件 | 编写指南
336 0
|
编译器 Shell C语言
Makefile文件 | 进阶指南
Makefile文件 | 进阶指南
381 0
|
C语言
玩转Makefile | 四步教你从零开始写Makefile
玩转Makefile | 四步教你从零开始写Makefile
150 0