浅谈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目标文件列表


相关文章
|
3月前
|
Shell Linux C++
Makefile编译实战
Makefile编译实战
70 0
|
10月前
|
C语言
Makefile教程(Makefile的结构)
Makefile教程(Makefile的结构)
66 0
|
9月前
|
Shell
如何使用makefile
如何使用makefile
|
Shell Linux 开发工具
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(一)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
447 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(一)
|
NoSQL Shell Linux
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(三)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
233 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(三)
|
自然语言处理 算法 NoSQL
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(二)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
171 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(二)
|
IDE Linux Shell
【Makefile】简单的Makefile编写
【Makefile】简单的Makefile编写
|
Shell Linux C语言
Makefile文件 | 编写指南
Makefile文件 | 编写指南
314 0
|
C++ 编译器 C语言
makefile模板
1,编译so #!/bin/bash ############################################################################ # ############################################################################ #源文件,自动找所有.
1001 0