[linux]makefile多目录
发布日期:2022-03-30 18:18:23
浏览次数:34
分类:博客文章
本文共 1490 字,大约阅读时间需要 4 分钟。
在使用makefile多目录编写前需要掌握几个函数及符号
自定义变量
target=edit
$(target)
有点像C语言中的#define
,这里的 $(target)
会被替换成edit
.
也可以替换多个文件,注意空格
object=main.o xxx.o xxx.o
自动变量
自动变量是使用在第二行也就是gcc -c xxx
中
$<
: 规则中的第一个依赖
$@
:规则中的目标$^
: 规则中所有的依赖 $(target):$(obj)gcc \$^ -o \$@
这行代码的意思是规则中所有的依赖($^)(.o文件)生成目标($@)
$(target)
自动匹配
子规则中:
目标:依赖
%.o:%.c
makefile函数
pro=$(wildcard src/*.c)src=$(wildcard *.c)obj=$(patsubst %.c,%.o,$(pro) $(src))
wildcard
查找当前目录下和src目录下所有.c文件,分别返回给pro和src
pro=$(wildcard *.c)
src=$(wildcard src/*.c)
patsubst
替换所有.c文件为.o文件obj=$(patsubst %.c,%.o,$(pro) $(src))
注意:
我在这里用空格将$(pro) $(src)
分隔开,这样在编译的时候系统不会发生main.cxxx.c
的情况,也就是头尾相连.
如此,前期准备工作就完成了.
代码实现
.├── main.c├── makefile└── src ├── Speak.c └── Speak.h
main.c
#include#include "src/Speak.h"int main(){ printf("Helo\n"); Speak(); return 0;}
src/Speak.c
#include "Speak.h"void Speak(void){printf("Speak\n");}
src/Speak.h
#includevoid Speak(void);
在这里开始解释makefile文件
pro=$(wildcard *.c)src=$(wildcard src/*.c)obj=$(patsubst %.c,%.o,$(pro) $(src))target=edit$(target):$(obj) gcc $^ -o $@%.o:%.c gcc -c $< -o $@.PHONY:cleanclean: rm $(obj) $(target) -f
我们将根目录下的.c文件(只有一个main.c)通过wildcard
返回给pro
src
目录下的.c文件通过wildcard
返回给src
通过patsubst
替换所有.c文件为.o文件
然后通过自动匹配依赖
%.o:%.c gcc -c $< -o $@
生成各个.c文件的.o文件
最终生成edit可执行文件
$(target):$(obj) gcc $^ -o $@
整理:
利用
wildcard
返回各个目录下的.c文件,利用
patsubst
将各个.c换成.o(这一步并没有生成.o文件,只是相当于将main.c
返回为main.o
)利用自动匹配自动生成各个.o(这一步才是生成.o文件)
将所有的.o生成可执行文件edit
转载地址:https://www.cnblogs.com/cnleika/p/11422793.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月03日 05时44分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
”为什么有这么多人执着于中文编程?”回答两千赞留念及回应
2019-04-26
【家务】盘点小孩玩具零件缺失情况
2019-04-26
开发中文 API 的一些策略
2019-04-26
从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)
2019-04-26
中文命名标识符如何区分类型和变量
2019-04-26
编程术语成系统中文化的意义
2019-04-26
草蟒 Python 中文 API 与 IDE 支持尝鲜
2019-04-26
一种改进中文 API 可读性的方法:参数不限于在末尾
2019-04-26
中文编程开发工具的生存模式探讨
2019-04-26
写给木兰编程语言研发团队的公开信
2019-04-26
为什么要急着为「木兰」编程语言贴上“造假”的标签?
2019-04-26
编程语言国产化的关键一战——对肆意污名化“木兰”编程语言说“不”
2019-04-26
各大媒体对「木兰」编程语言的不当言论盘点
2019-04-26
戳破针对「木兰」编程语言的拙劣谣言
2019-04-26
为「木兰」编程语言添加对中文命名标识符的支持
2019-04-26
悬赏万元,重现「木兰」编程语言编译器
2019-04-26
跳出编程语言本身看中文编程语言设计
2019-04-26
RPLY 入门例程中文化
2019-04-26
木兰编程语言入门教程之一——浅介
2019-04-26