我是靠谱客的博主 俊秀悟空,最近开发中收集的这篇文章主要介绍Makefile文件的编写,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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文件的编写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部