概述
Makefile核心要点:
1.会不会写makefile从侧面说明了一个人是否具备完成大型项目开发大型工程的能力
2.makefile是用来编译链接文件的,实现了自动化编译
3.与make指令搭配,一条make指令就完成了整个工程完全自动编译,极大的提高了软件开发的效率。
一个 makefile 主要含有一系列的规则,如下:
A: B
(tab)<command>
(tab)<command>
每个命令行前都必须有tab符号。
创建一个Makefile 文件
//test为目标文件(放在左边) test.c为依赖文件(放在‘ :’g后边),test依赖于test.c
1 test : test.c
2 gcc -o test test.c//注意命令前面一定要加Table键
3 .PHONY : clean //clean为关键字 为 伪目标,并不会生成临时文件
4 clean:
5 rm -f test //命令 前加 Table键
当用户键入make clean命令时,会删除test文件。
上一层楼:使用变量
OBJS = file1.o file2.o
CC = gcc
CFLAGS = -Wall -O -g
要设定一个变量,你只要在一行的开始写下这个变量的名字,后 面跟一个 = 号,后面跟你要设定的这个变量的值。以后你要引用 这个变量,写一个 $ 符号,后面是围在括号里的变量名。
CFLAGS = -Wall -O –g,解释一下。这是配置编译器设置,并把它赋值给CFFLAGS变量。
-Wall: 输出所有的警告信息。
-O: 在编译时进行优化。
-g: 表示编译debug版本。
再上一层楼:使用函数
。。。。。
makefile的选项LDFLAGS和LIBS的区别:
LDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。
网上不难搜索到上面这段话。不过“告诉ld怎么吃”是什么意思呢?
看看如下选项:
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib
LIBS = -lmysqlclient -liconv
这就明白了。LDFLAGS告诉链接器从哪里寻找库文件,LIBS告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。
说到这里,进一步说说LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给"-Wl,R"
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
最后
以上就是俊秀悟空为你收集整理的Makefile文件的编写的全部内容,希望文章能够帮你解决Makefile文件的编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复