Makefile 中的命令

15 篇文章 0 订阅


$(filter PATTERN…,TEXT) 

函数名称:过滤函数—filter。 
函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所
有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字
符“%”。存在多个模式时,模式表达式之间使用空格分割。 
返回值:空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。 
函数说明:“filter”函数可以用来去除一个变量中的某些字符串,我们下边的例子中
就是用到了此函数。 
示例: 
sources := foo.c bar.c baz.s ugh.h 
foo: $(sources) 
cc $(filter %.c %.s,$(sources)) -o foo 
 
使用“$(filter %.c %.s,$(sources))”的返回值给 cc 来编译生成目标“foo”,函数返回

值为“foo.c bar.c baz.s”


$(filter-out PATTERN...,TEXT) 

函数名称:反过滤函数—filter-out。 
函数功能:和“filter”函数实现的功能相反。过滤掉字串“TEXT”中所有符合模式
“PATTERN”的单词,保留所有不符合此模式的单词。可以有多个模式。
存在多个模式时,模式表达式之间使用空格分割。。 
返回值:空格分割的“TEXT”字串中所有不符合模式“PATTERN”的字串。 
函数说明: “filter-out”函数也可以用来去除一个变量中的某些字符串, (实现和
“filter”函数相反)。 
示例: 
objects=main1.o foo.o main2.o bar.o 
mains=main1.o main2.o 
 
$(filter-out $(mains),$(objects)) 
实现了去除变量“objects”中“mains”定义的字串(文件名)功能。它的返回值

为“foo.o bar.o”。



上例子:

all:gao
    @echo "final"
.DEFAULT:
  @echo "In default"

由于 gao 是一个前提条件,但是 makefile中没有一个名字为 gao的目的。

所以符合 .DEFAULT 目的的执行条件

故执行结果为:

In default

final

完毕



$(MAKE) , make命令


在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这样会很难维护我们的Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。

例如,我们有一个子目录叫subdir,这个目录下有个Makefile文件,来指明了这个目录下文件的编译规则。那么我们总控的Makefile可以这样书写:

subsystem:

cd subdir && $(MAKE)

其等价于:

subsystem:

$(MAKE) -C subdir

定义$(MAKE)宏变量的意思是,也许我们的make需要一些参数,所以定义成一个变量比较利于维护。这两个例子的意思都是先进入“subdir”目录,然后执行make命令。

我们把这个Makefile叫做“总控Makefile”,总控Makefile的变量可以传递到下级的Makefile中(如果你显示的声明),但是不会覆盖下层的Makefile中所定义的变量,除非指定了“-e”参数。



$(MAKE) –C $$dir || exit 1

转到dir这个目录下面make,如果执行结果为0(失败)就执行exit 1,意思就是返回错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile,可以使用Linux命令来执行各种操作。比如,可以使用gcc命令来编译程序,使用rm命令来删除文件。在Makefile命令通常以tab键开头,并且每个命令占一行。例如,可以使用以下命令来编译名为hello的程序: ``` hello: hello.c gcc -o hello hello.c ``` 这个Makefile命令使用gcc命令来编译hello.c文件,并将生成的可执行文件命名为hello。另外,还可以使用clean命令来删除hello可执行文件: ``` clean: rm -f hello ``` 这个Makefile命令使用rm命令来删除hello可执行文件。需要注意的是,在Makefile命令前面的行必须以tab键开头,否则会导致make命令无法正确执行。 #### 引用[.reference_title] - *1* [Makefile 的使用(在 Linux 使用 make 命令来编译程序)](https://blog.csdn.net/thisway_diy/article/details/109336752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【 Linux Makefile】Linux Makefile 的简单使用](https://blog.csdn.net/qq_42127861/article/details/116659936)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值