隐含规则
复杂的Makefile一般会使用隐含规则内的变量来简化编译处理。
将隐含规则中使用的变量分成两种:一种是命令相关的,如“CC”;一种是参数相关的,如“CFLAGS”。这些变量都是大写表示。
常用的命令变量有:
CC
C语言编译程序。默认命令是“cc”
CXX
C++语言编译程序。默认命令是“g++”
CPP
C程序的预处理器(输出是标准输出设备)。默认命令是“$(CC) –E”
RM
删除文件命令。默认命令是“rm –f”
参数相关的变量:
CFLAGS
C语言编译器参数
CXXFLAGS
C++语言编译器参数
LDFLAGS
链接器参数。(如:“ld”)
模式规则:
可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。
如:
%.o : %.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
原文链接: https://www.cnblogs.com/chenzhefan/p/8511760.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/269944
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!