makefile编写

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 命令







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值