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 ; ; 指出了怎么从所有的[.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

原文链接: https://www.cnblogs.com/chenzhefan/p/8511760.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/269944

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午8:48
下一篇 2023年2月14日 下午8:50

相关推荐