makefile编写
2017-02-21 20:32
204 查看
http://blog.csdn.net/ruglcc/article/details/7814546/(makefile)
1、在我们编写makefile文件时,当.h头文件和.cpp文件不在同一个文件夹时,可以通过make的关键字vpath来指定文件搜索路径。
vpath <pattern> <directories> <directories> 表示搜索目录,多个目录以分号分割
vpath %.h include # 表示在include目录下寻找.h文件
vpath %.h include: bar # 表示在include和bar两个目录中进行搜索
2、clean 伪目标 的正确申明方法
.PHONY:clean
clean:
rm *.o temp
3、makefile 文件生成多个可执行文件的方法
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
4、make的自动化变量
objects = foo.o bar.o
all:$(objects)
$(objects):%.o:%.c
$(CC) -c $(CFLAGS) $< -0 $@
其中$< 表示所有依赖的目标集
$@ 表示目标集
5、g++ -MM main.cpp 可以获得该源文件的所有依赖的.h头文件(该头文件不包括标准库的头文件)
6、显示命令,在makefile文件中,当不想输出make执行时输出执行命令,可以通过在命令前加入@来不输出执行命令
7、makefile中的某条命令执行失败时,后面的命令可能就不会去执行,比如mkdir命令,当目录存在时,该命令就会返回失败
对于这种情况,可以在命令前加入-号,来忽略这条命令的返回结果,都认为该命令是正确的。
8、make 可以嵌套编译,如下所示:
subsystem:
cd subdir && $(MAKE)
表示切换到subdir目录,并进行编译。
在运行make命令时,可以指定-C参数,这样能够打印不同层级的makefile路径
9、makefile 中可以定义命令包,使代码更加节省
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef
上述定义了run-yacc 命令包
10、在makefile中定义一个空格
nullstring :=
space := $(nullstring) # end of the line
11、?= 对不存在的变量进行赋值
FOO ?= bar #如果该变量没有被定义过,则被赋值为bar,如果该变量已经被定义,该语句被忽略。
12、变量中字符的替换
foo := a.o b.o c.o
bar := $(foo:.o=.c)
上面两行表示把foo中的字符串以.o结尾的字符串替换成以.c结尾的字符串
13、y = $(subst 1,2,$(x))
subst 时字符替换函数
14、prog : CFLAGS = -g
该变量只作用到由该目标引发的规则中去
15、origin 函数可以打印出变量是谁定义的
16、调用shell 命令
1、在我们编写makefile文件时,当.h头文件和.cpp文件不在同一个文件夹时,可以通过make的关键字vpath来指定文件搜索路径。
vpath <pattern> <directories> <directories> 表示搜索目录,多个目录以分号分割
vpath %.h include # 表示在include目录下寻找.h文件
vpath %.h include: bar # 表示在include和bar两个目录中进行搜索
2、clean 伪目标 的正确申明方法
.PHONY:clean
clean:
rm *.o temp
3、makefile 文件生成多个可执行文件的方法
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
4、make的自动化变量
objects = foo.o bar.o
all:$(objects)
$(objects):%.o:%.c
$(CC) -c $(CFLAGS) $< -0 $@
其中$< 表示所有依赖的目标集
$@ 表示目标集
5、g++ -MM main.cpp 可以获得该源文件的所有依赖的.h头文件(该头文件不包括标准库的头文件)
6、显示命令,在makefile文件中,当不想输出make执行时输出执行命令,可以通过在命令前加入@来不输出执行命令
7、makefile中的某条命令执行失败时,后面的命令可能就不会去执行,比如mkdir命令,当目录存在时,该命令就会返回失败
对于这种情况,可以在命令前加入-号,来忽略这条命令的返回结果,都认为该命令是正确的。
8、make 可以嵌套编译,如下所示:
subsystem:
cd subdir && $(MAKE)
表示切换到subdir目录,并进行编译。
在运行make命令时,可以指定-C参数,这样能够打印不同层级的makefile路径
9、makefile 中可以定义命令包,使代码更加节省
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef
上述定义了run-yacc 命令包
10、在makefile中定义一个空格
nullstring :=
space := $(nullstring) # end of the line
11、?= 对不存在的变量进行赋值
FOO ?= bar #如果该变量没有被定义过,则被赋值为bar,如果该变量已经被定义,该语句被忽略。
12、变量中字符的替换
foo := a.o b.o c.o
bar := $(foo:.o=.c)
上面两行表示把foo中的字符串以.o结尾的字符串替换成以.c结尾的字符串
13、y = $(subst 1,2,$(x))
subst 时字符替换函数
14、prog : CFLAGS = -g
该变量只作用到由该目标引发的规则中去
15、origin 函数可以打印出变量是谁定义的
16、调用shell 命令
相关文章推荐
- Linux平台Makefile文件的编写基础篇
- Makefile编写----实例展示
- Makefile编写(6.17)
- 编写Makefile文件常用的三个变量
- 学习编写Makefile
- 关于erlang中makefile的编写
- Linux系统下Makefile文件编写
- Linux平台Makefile文件的编写基础篇
- 一个通用Makefile的编写
- 内核Makefile编写
- Makefile的编写方法
- 如何自己编写Makefile(简单介绍)
- Makefile构建工程设计——工程构建与编写规则
- makefile编写
- 关于linux中Makefile文件的编写(简单例子)
- 编写多文件,多目录makefile(借鉴网上的一篇文章来自己练手)
- ubuntu下编译和链接的过程 &&编写opencv makefile
- linux 下helloworld .so makefile文件编写菜鸟记录
- Linux平台Makefile文件的编写基础篇
- Linux 操作系统 C 语言编程入门之编译调试说明及Makefile的编写