Linux makefile基础知识
2016-12-17 15:31
405 查看
用Make进行宏编译
为什么用makefile?
当一个程序分为多个部分的时候,当其中的一个文件修改后需要重新编译所有的文件,过程非常复杂。在makefile中,存在系统默认的自动化变量
:代表所有的依赖文件@:代表目标
$<:代表第一个依赖文件
Demo如下:
LIBS = -lm OBJS = main.o haha.o sin_value.o cos_value.o main: ${OBJS} # gcc $^ -o $@ ${LIBS} gcc -o $@ $^ ${LIBS} clean: rm -f ${OBJS}
Linux makefile
make就像Shell脚本一样,其中也可以执行操作系统的命令。整个软件工程的编译、链接只需要一个make指令就可以完成。其中包括:哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件、如何产生我们想要的可执行文件。规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites
command
目标 依赖 命令
main.o(目标):main.c(依赖)
gcc -c main.c(命令)
makefile中把那些没有任何依赖只执行动作的目标成为“伪目标”(phony targets)
http://blog.csdn.net/ruglcc/article/details/7814546/
可以参考这个PPT:
http://wenku.baidu.com/link?url=zRKmb2VRhOV6d4DmaAB2zc4-dRwjcbCQlPb2i-ilNiadCI0UQ8UiJZcHoWmKZj2RSL8mwarZprkNdCa8tNDOAOI4aDG500FvuT7vaLyzj0q
可以参考鸟哥的Linux私房菜 第668页
makefile的基本语法与变量
makefile规则如下:目标(target):目标文件1 目标文件2
gcc -o 欲新建的可执行文件 目标文件1 目标文件2
Demo1
makefile文件里面有两个目标:main: main.o haha.o sin_value.o cos_value.o gcc -o main main.o haha.o sin_value.o cos_value.o -lm clean: rm -f main main.o haha.o sin_value.o cos_value.o
只编译:
make main
清除信息:
make clean
先清除信息再编译:
make clean main
Demo2
运用变量来简化makefile:LIBS = -lm OBJS = main.o haha.o sin_value.o cos_value.o main: ${OBJS} gcc -o main ${OBJS} ${LIBS} clean: rm -f main ${OBJS}
注:
1.变量与变量内容以“=”隔开,同时两边具有空格。
2.变量左边不可以有,例如上面范例的第一行LIBS左边不可以有
3.变量习惯上用大写。
Demo3
LIBS = -lm OBJS = main.o haha.o sin_value.o cos_value.o CFLAGS = -Wall #这个变量加入一些标识信息 main: ${OBJS} gcc -o main ${OBJS} ${LIBS} clean: rm -f main ${OBJS}
Demo4
LIBS = -lm OBJS = main.o haha.o sin_value.o cos_value.o CFLAGS = -Wall #这个变量加入一些标识信息 main: ${OBJS} gcc -o $@ ${OBJS} ${LIBS} #$@ 就是main clean: rm -f main ${OBJS}
Demo5
makefile当中ifeq和else ifeq的使用#VAR1 = A VAR1 = B main: main.o gcc -o main main.o ifeq ($(VAR1),A) ./toucha.sh else ifeq ($(VAR1),B) ./touchb.sh endif clean: rm -f main main.o a.txt b.txt
Demo5
当同时想编译两个输出的可执行文件时,要加入all,Demo如下;all: main1 main2 main1: main1.o gcc -o main1 main1.o main2: main2.o gcc -o main2 main2.o clean: rm -f main1 main1.o main2 main2.o
makefile里面有什么?
Makefile里主要包含了五个东西:显示规则、隐晦规则、变量定义、文件指示和注释。
显示规则:显示规则说明了如何生成一个或多个的目标文件。
隐晦规则:由我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗略书写makefile。
变量定义:
文件指示:
注释:
文件名
make -f 文件名变量
在makefile中,存在系统默认的自动化变量。:代表所有的依赖文件@:当前目标的名字
<:当前依赖文件的名字c*:不包括后缀名的当前依赖文件的名字
在makefile文件中,下面两个字符也经常会遇见:
@:告诉make在执行某条命令前不要将该命令显示在标准输出上。
-:告诉make命令忽略所有错误。
内置规则
make命令本身带有大量的内置规则,可以极大地简化makefile文件的内容。make main1.c
也可以指明是通过gcc
make CC=gcc CFLGAS=”-Wall -g” main1.c
相关文章推荐
- Linux的make与makefile的基础知识
- Linux下C语言编程基础知识--gcc编译器的使用、MakeFile文件的编写
- linux Makefile基础知识
- Linux基础知识99问(二)
- Linux基础知识99问(四)
- Linux基础知识
- [基础知识]Linux新手系列之五
- Linux基础知识99问(三)
- Linux下C语言编程--基础知识
- (转贴)Linux基础知识(4)
- Linux基础知识(3)
- linux0.11缓冲处理过程及一点块设备的基础知识
- Linux基础知识99问(一)
- linux基础之Makefile
- 掌握“神兵利器”--linux基础知识99问(转)
- 1)Linux程序设计入门--基础知识
- linux驱动开发的基础知识
- Linux 硬件管理的基础知识
- Linux基础知识99问(一)
- Linux下C语言编程--基础知识