求教这个makefile是什么意思?

jiang4357291 2017-08-04 04:05:17
OBJS = main.o test1.o test2.o test3.o
FLAGS=-I ./cc #cc为文件夹名

all:
make build DEBUG=-g

build:
make -C bb/ all DEBUG=$(DEBUG) #bb为文件夹名
gcc $(DEBUG) -c $(FLAGS) main.c
gcc -o test $(OBJS) -lm -lpthread

clean:
rm -f test
rm -f *.o
make -C bb/ clean

.PHONY : all build
...全文
180 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang4357291 2017-08-05
  • 打赏
  • 举报
回复
引用 3 楼 jklinux 的回复:
[quote=引用 2 楼 jiang4357291 的回复:] [quote=引用 1 楼 jklinux 的回复:] 执行的大概顺序: 1) make build DEBUG=-g //执行本Makefile里build目标 2) make -C bb/ all DEBUG=-g //执行当前源码目录下的bb子目录里的Makefile, 目标是all:, -g是表示编译时加上调试信息. 里面可能是产生这些.o文件: test1.o test2.o test3.o gcc -g -c -I ./cc main.c //把main.c编译成main.o, -I ./cc是指定头文件的所在目录 gcc -o test main.o test1.o test2.o test3.o -lm -lpthread //把.o文件链接成可执行文件test, -lm -lpthread是链接动态库
感谢,解释的很清楚,大概懂了,不过由于刚接触makefile所以还是有三个地方没太明白: 1.make build DEBUG=-g 这一句里是执行make build的同时定义了一个名为DEBUG的变量吗?可以同时这样写? 2.make -C bb/ all DEBUG=-g 这里的all是指bb子目录里的makefile里面的all吗? 3.指定头文件目录为cc时是从当前目录进入的写法./cc,而make bb子目录里的makefile的时候,是直接bb/的写法,这里加个/是为了便于理解吗?如果是bb或者./bb或者./bb/是否也可以?[/quote] 1. 是的,也可以用这种方式改变里面变量的值。这个你可以额外写一个Makefile来测试 2. 是的 3. "./cc"是表示当前目录下的cc目录,  bb/这种没指定路径的就是当前工作目录下的子目录bb了[/quote]非常感谢!
jklinux 2017-08-05
  • 打赏
  • 举报
回复
引用 2 楼 jiang4357291 的回复:
[quote=引用 1 楼 jklinux 的回复:] 执行的大概顺序: 1) make build DEBUG=-g //执行本Makefile里build目标 2) make -C bb/ all DEBUG=-g //执行当前源码目录下的bb子目录里的Makefile, 目标是all:, -g是表示编译时加上调试信息. 里面可能是产生这些.o文件: test1.o test2.o test3.o gcc -g -c -I ./cc main.c //把main.c编译成main.o, -I ./cc是指定头文件的所在目录 gcc -o test main.o test1.o test2.o test3.o -lm -lpthread //把.o文件链接成可执行文件test, -lm -lpthread是链接动态库
感谢,解释的很清楚,大概懂了,不过由于刚接触makefile所以还是有三个地方没太明白: 1.make build DEBUG=-g 这一句里是执行make build的同时定义了一个名为DEBUG的变量吗?可以同时这样写? 2.make -C bb/ all DEBUG=-g 这里的all是指bb子目录里的makefile里面的all吗? 3.指定头文件目录为cc时是从当前目录进入的写法./cc,而make bb子目录里的makefile的时候,是直接bb/的写法,这里加个/是为了便于理解吗?如果是bb或者./bb或者./bb/是否也可以?[/quote] 1. 是的,也可以用这种方式改变里面变量的值。这个你可以额外写一个Makefile来测试 2. 是的 3. "./cc"是表示当前目录下的cc目录,  bb/这种没指定路径的就是当前工作目录下的子目录bb了
jiang4357291 2017-08-05
  • 打赏
  • 举报
回复
引用 1 楼 jklinux 的回复:
执行的大概顺序: 1) make build DEBUG=-g //执行本Makefile里build目标 2) make -C bb/ all DEBUG=-g //执行当前源码目录下的bb子目录里的Makefile, 目标是all:, -g是表示编译时加上调试信息. 里面可能是产生这些.o文件: test1.o test2.o test3.o gcc -g -c -I ./cc main.c //把main.c编译成main.o, -I ./cc是指定头文件的所在目录 gcc -o test main.o test1.o test2.o test3.o -lm -lpthread //把.o文件链接成可执行文件test, -lm -lpthread是链接动态库
感谢,解释的很清楚,大概懂了,不过由于刚接触makefile所以还是有三个地方没太明白: 1.make build DEBUG=-g 这一句里是执行make build的同时定义了一个名为DEBUG的变量吗?可以同时这样写? 2.make -C bb/ all DEBUG=-g 这里的all是指bb子目录里的makefile里面的all吗? 3.指定头文件目录为cc时是从当前目录进入的写法./cc,而make bb子目录里的makefile的时候,是直接bb/的写法,这里加个/是为了便于理解吗?如果是bb或者./bb或者./bb/是否也可以?
jklinux 2017-08-04
  • 打赏
  • 举报
回复
执行的大概顺序: 1) make build DEBUG=-g //执行本Makefile里build目标 2) make -C bb/ all DEBUG=-g //执行当前源码目录下的bb子目录里的Makefile, 目标是all:, -g是表示编译时加上调试信息. 里面可能是产生这些.o文件: test1.o test2.o test3.o gcc -g -c -I ./cc main.c //把main.c编译成main.o, -I ./cc是指定头文件的所在目录 gcc -o test main.o test1.o test2.o test3.o -lm -lpthread //把.o文件链接成可执行文件test, -lm -lpthread是链接动态库

18,772

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧