网站首页 > 教程文章 正文
Make是一种编译管理器,根据文件的时间戳自动检查出有更新的文件进行编译,只编译有改动的代码,不需要全部编译。
1.单个目录的情况
上图中展示了2种方法:
(1)
test:test.o
gcc test.o -o test
test.o:test.c test.h
gcc -c test.c -o test.o
(2)
OBJS1 := test.o #用户自定义变量1,代表.o文件
OBJS2 := test.c test.h #用户自定义变量2,代表源码文件
CC := gcc #预定义变量,指定编译器
TARGET :=test #用户自定义变量3,代表最终可执行程序名称
$(TARGET):$(OBJS1) #生成可执行程序依赖的目标文件
$(CC) $^ -o $@ #将所有的.o文件链接起来,生成可执行程序
@echo mytarge:$@ #打印信息,便于调试
$(OBJS1):$(OBJS2) #由.c和.h生成.o文件
$(CC) -c lt; -o $@ #编译test.c生成test.o
@echo mytarge:$@ #打印信息,便于调试
.PHONY:clean #.PHONY是一个伪目标,防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突
clean:
rm *.o $(TARGET) #清除所有的.o和可执行程序
$@:表示目标文件的完整名称
$^:表示所有不重复的目标依赖文件,以空格隔开
lt;:表示第一个依赖文件名称
$*:不包含扩展名的目标文件名称
$+:所有的依赖文件,以空格隔开,以出现的先后顺序,包含重复的依赖文件
@echo 相当于C语言中printf的功能
-c 只编译不链接,生成.o文件
make -C dir 读入指定目录中的Makefile
make -f file 读入当前目录中的file作为Makefile
make -s 在执行命令时不显示命令
make -i 所有的命令执行有误
make -I dir 指定被包含的Makefile的目录
make -n 只打印要执行的命令,但不执行这些命令
Makefile的格式:
目标:依赖的文件
Tab 命令
test:test.o
gcc test.o -o test
2.多个目录的情况
顶级Makefile
CC :=gcc
SUBDIR = test1\
test2\
src\
obj
OBJS = test1.o test2.o main.o
APP = app
OBJ = obj
BIN = bin
export CC OBJS APP OBJ BIN
all : CHECK_DIR $(SUBDIR)
CHECK_DIR:
mkdir -p $(BIN)
$(SUBDIR):ECHO
make -C $@
ECHO:
@echo $(SUBDIR)
@echo begin compile
clean:
@$(RM) $(OBJ)/*.o
@rm -rf $(BIN)
运行结果:
root@ubuntu-virtual-machine:/home/ubuntu/titok/makefileproj/multifile# ./bin/app
this is first test
this is second test
猜你喜欢
- 2025-07-06 一个可以用来练手的C++开源编译器!
- 2025-07-06 Linux开发工具使用指南(linux软件开发工具)
- 2025-07-06 Linux下Makefile文件的模式规则和自动化变量
- 2025-07-06 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
- 2025-07-06 postgresql自定义函数实现,通过contrib模块进行扩展
- 2025-07-06 Linux GCC编译及Makefile使用(gcc makefile编写)
- 2025-07-06 wordpress独立站上线两周没收录?原来是robots.txt搞的鬼…
- 2025-07-06 make sure用法解析(make sure sth)
- 2025-07-06 每天一个 Python 库:Django全能Web框架,一站式后台开发
- 2025-07-06 向Makefile传参数(makefile 命令行参数)
- 最近发表
-
- 一个可以用来练手的C++开源编译器!
- Linux开发工具使用指南(linux软件开发工具)
- Linux下Makefile文件的模式规则和自动化变量
- 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
- postgresql自定义函数实现,通过contrib模块进行扩展
- Linux GCC编译及Makefile使用(gcc makefile编写)
- wordpress独立站上线两周没收录?原来是robots.txt搞的鬼…
- make sure用法解析(make sure sth)
- 每天一个 Python 库:Django全能Web框架,一站式后台开发
- Makefile实践(makefile经典教程)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)