当前位置: 技术问答>linux和unix
初学求帮忙解释一下makefile里这四行的意思。。。
来源: 互联网 发布时间:2017-05-29
本文导语: PROG = 3510AppTest LIB = 3510api $(PROG):lib3510api.a $(CC) drv_socket.c pub.c machine.c systest.c -o $(PROG) -Wl,-elf2flt="-s 200000" -static -L. -l$(LIB) -lpthread 就是上面这四行 小弟初学 帮忙解释下着四行的意思 我想以此为例学习...
PROG = 3510AppTest
LIB = 3510api
$(PROG):lib3510api.a
$(CC) drv_socket.c pub.c machine.c systest.c -o $(PROG) -Wl,-elf2flt="-s 200000" -static -L. -l$(LIB) -lpthread
就是上面这四行 小弟初学 帮忙解释下着四行的意思 我想以此为例学习下
还有就是这四行最后输出的可执行文件到底是3510AppTest还是lib3510api.a?如果是其中的一个 那另外一个的作用是什么呢?
LIB = 3510api
$(PROG):lib3510api.a
$(CC) drv_socket.c pub.c machine.c systest.c -o $(PROG) -Wl,-elf2flt="-s 200000" -static -L. -l$(LIB) -lpthread
就是上面这四行 小弟初学 帮忙解释下着四行的意思 我想以此为例学习下
还有就是这四行最后输出的可执行文件到底是3510AppTest还是lib3510api.a?如果是其中的一个 那另外一个的作用是什么呢?
|
PROG = 3510AppTest
LIB = 3510api
$(PROG):lib3510api.a
$(CC) drv_socket.c pub.c machine.c systest.c -o $(PROG) -Wl,-elf2flt="-s 200000" -static -L. -l$(LIB) -lpthread
前两行是变量赋值
第三行是依赖关系,表明 $(PROG) (即3510AppTest)是对lib3510api.a有依赖关系的:当lib3510api.a比$(PROG) 新、或者$(PROG) 不存在时,执行第四行的语句。
第四行可以简化抽象为 gcc 1.c -o 3510AppTest -l3510api。
生成的文件是 3510AppTest。
另一个文件(lib3510api.a)是一个静态库文件,可以理解成别人提供给你用的中间文件,和pthread这种类似。
makefile的学习,可以搜索一下《跟我一起写 Makefile.pdf》,比较容易入门。
可以搜索“ 静态库、动态库(如何使用)”来增加一些代价编译的知识。
|
Makefile中的变量其实非常类似于C语言中的宏定义,只是字符串替换罢了。
$(PROG):lib3510api.a : 冒号前的是目标,后的是依赖文件,即前面这个目标依赖于后面这个文件
这四行最后输出的可执行文件是哪个,是由-o 后面的$(PROG) 决定的,由上面的代码可知,为3510AppTest。
其实说白了,你要看最终的第四句到底是执行了什么,生成的东西也是由$(CC)这个命令来决定的,一般情况下CC会被赋值为gcc或"交叉工具链前缀+gcc", 而CXX或CPP则被赋值为g++,最终还是由Makefile中赋值决定。
$(PROG):lib3510api.a : 冒号前的是目标,后的是依赖文件,即前面这个目标依赖于后面这个文件
这四行最后输出的可执行文件是哪个,是由-o 后面的$(PROG) 决定的,由上面的代码可知,为3510AppTest。
其实说白了,你要看最终的第四句到底是执行了什么,生成的东西也是由$(CC)这个命令来决定的,一般情况下CC会被赋值为gcc或"交叉工具链前缀+gcc", 而CXX或CPP则被赋值为g++,最终还是由Makefile中赋值决定。
|