打赏

Makefile 隐含规则,模式规则,常见变量

   隐含规则
复杂的Makefile一般会使用隐含规则内的变量来简化编译处理。
将隐含规则中使用的变量分成两种:一种是命令相关的,如“CC”;一种是参数相关的,如“CFLAGS”。这些变量都是大写表示。

  常用的命令变量有:
CC
C语言编译程序。默认命令是“cc”
CXX
C++语言编译程序。默认命令是“g++”
CPP
C程序的预处理器(输出是标准输出设备)。默认命令是“$(CC) –E”
RM
删除文件命令。默认命令是“rm –f”

  参数相关的变量:
CFLAGS
C语言编译器参数
CXXFLAGS
C++语言编译器参数
LDFLAGS
链接器参数。(如:“ld”)


  模式规则:
可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。
如:
%.o : %.c ; <command ......>; 指出了怎么从所有的[.c]文件生成相应的[.o]文件的规则。如果要生成的目标是"a.o b.o",那么"%c"就是"a.c b.c"。

 

  常见变量:
all
这个伪目标是所有目标的目标,其功能一般是编译所有的目标
clean
这个伪目标功能是删除所有被make创建的文件
install
这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去
print
这个伪目标的功能是例出改变过的源文件

INCLUDE
指明头文件的路径
LIBS
常用于链接时配合LDFLAGS链接动态库,LIBS指明动态库名称,LDFLAGS指出动态库路径
SOURCE
指代项目中的源文件
OBJS
指代项目中的目标文件
TARGET
指代项目中的可执行文件

 

附上一个用到上述变量的例子,但不一定能用,自行修改!

 1 #################
 2 ## date:20180305
 3 ##################
 4 
 5 # test SOURCE OBJECT TARGET
 6 SOURCE := main.c test.c
 7 OBJS := main.o test.o
 8 TARGET := main
 9 
10 
11 # test CC LDFLAGS LIBS INCLUDE
12 CC := gcc
13 LDFLAGS := -L/path/libtest.so
14 LIBS := -ltest
15 INCLUDE := -I/path/test.h
16 
17 
18 # test all
19 all:
20     $(CC) -O $(TARGET) $(SOURCE)
21     
22 
23 #test clean
24 clean:
25     rm -fr *.o

 

posted @ 2018-03-05 23:01  巴尔扎克_S  阅读(1352)  评论(0编辑  收藏  举报