首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Make:在静态模式规则中设置特定于目标的变量

Make是一种构建工具,用于自动化软件编译和构建过程。在静态模式规则中设置特定于目标的变量是指在Makefile中使用模式规则来定义特定目标的变量。

在Makefile中,可以使用静态模式规则来定义一组目标的规则。静态模式规则的语法如下:

代码语言:txt
复制
<targets...>: <target-pattern>: <prerequisites...>
    <recipe>

其中,<targets...>表示一组目标文件,<target-pattern>是一个模式,<prerequisites...>表示目标文件所依赖的文件,<recipe>是执行构建操作的命令。

在静态模式规则中,可以使用特定于目标的变量来定义针对不同目标的不同规则。这样可以根据目标的不同需求,灵活地设置不同的变量值。

例如,假设我们有两个目标文件target1target2,它们都依赖于同一个源文件source.c,但需要使用不同的编译选项。我们可以使用静态模式规则来定义如下:

代码语言:txt
复制
target1 target2: %.o: source.c
    gcc -c $< -o $@ $(CFLAGS)

在这个规则中,$<表示第一个前置条件(即源文件source.c),$@表示目标文件,$(CFLAGS)表示编译选项。通过设置不同的CFLAGS变量值,可以为不同的目标文件设置不同的编译选项。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

翻译qmake文档(四) Building Common Project Types

虽然所有的项目类型使用大量相同的变量,但是它们的每一个都使用项目特定的变量来自定义输出文件。      这里不会描述特定于平台的变量。...检查目标的运行可能会被一些Makefile变量自定义。这些变量变量 描述 TESTUNNER 每个测试命令前添加一个命令或shell片段。...它将会生成一个makefile规则,用以允许项目两种模式下构建。...可以通过下面的方式调用: make all 项目文件里可以把build_all选项添加到CONFIG变量,用来确保项目默认是两种模式下生成: CONFIG += build_all 这样允许Makefile...可以使用默认的规则处理 make 两种模式下安装 build_all选项确保安装规则被调用时将安装指向的两个目标版本: make install 也可以根据目标平台自定义构建目标的名字。

909100

Linux 下的make命令与Makefile

在上面的那个例子make调用的隐含规则是,把.o 的目标的依赖文件设置成.c ,并使用C的编译命令cc -c 隐含规则列表 这里我们将讲述所有预先设置(也就是make内建)的隐含规则,如果我们不明确地写下规则....o 的目标的依赖目标会自动推导为.p ,并且其生成命令是 隐含规则使用的变量 隐含规则的命令,基本上都是使用了一些预先设置变量。...你可以在你的makefile改变这些变量的值,或是make的命令行传入这些值,或是在你的环境变量设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...一个模式规则就好像一个一般的规则,只是规则,目标的定义需要有% 字符。% 的意思是表示一个或多个任意字符。依赖目标同样可以使用% ,只是依赖目标的% 的取值,取决于其目标。...这个特性是GNUmake的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用*,除非是隐含规则或是静态模式。如果目标的后缀是make所不能识别的,那么?

10.1K20

qmake:变量手册

可以通过分别修改 QMAKE_CFLAGS_DEBUG 和 QMAKE_CFLAGS_RELEASE 变量来调整特定于调试和发布模式的标志。...可以通过分别修改 QMAKE_CXXFLAGS_DEBUG 和 QMAKE_CXXFLAGS_RELEASE 变量来调整特定于调试和发布模式的标志。...注意:更改扩展名的特定于平台的变量会覆盖此变量的内容。 76、QMAKE_EXTENSION_STATICLIB 包含共享静态库的扩展。...指定项目目标的描述。这用于适用的情况下将描述放入应用程序的属性。这仅在设置了 VERSION 或 RC_ICONS 变量且未设置 RC_FILE 和 RES_FILE 变量时使用。...指定项目目标的版权信息。这用于适用的情况下将版权信息放入应用程序的属性。这仅在设置了 VERSION 或 RC_ICONS 变量且未设置 RC_FILE 和 RES_FILE 变量时使用。

3.5K20

Make

/headers表示../headers目录下搜索所有.h结尾的头文件。 变量: makefile通常可定义变量make执行时会把变量名出现的地方用变量值代替。...=:在此之前没有给该变量赋值才会给该变量赋值 +=:追加变量值,与原变量值之间用空格隔开 预定义变量: makefile 预定义了许多变量,隐含规则通常会用到这些变量: 宏名 初始值...库管理选项 LIBSUFFIXE .a 库的后缀 A a 库的扩展名 自动变量: 它们的值make运行过程动态的改变,是隐含规则所必需的变量。...$@:表示一个规则的目标文件名。 $%:当规则的目标文件是一个静态库文件时,$%就代表静态库的一个成员名。如果目标不是静态库文件,则该变量 值为空。...$<:规则的第一个依赖文件名。 $>:当规则是一个静态库文件时,该变量表示静态库名。 $?:所有比目标文件新的依赖文件列表,以空格分隔。

1.9K100

Linux makefile 教程 非常详细,且易懂

这里的这个函数是截取字符串的意思,“@”表示目标的集合,就像一个数组,“ 七、静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。...不管全局的(CFLAGS)的值是什么,prog目标,以及其所引发的所有规则(prog.o foo.o bar.o的规则),(CFLAGS)的值都是“-g” 九、模式变量 GNU的make,还支持模式变量...你可以在你的makefile改变这些变量的值,或是make的命令行传入这些值,或是在你的环境变量设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是规则,目标的定义需要有”%”字符。”%”的意思是表示一个或多个任意字符。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用”*”,除非是隐含规则或是静态模式

4.2K20

Makefile经典教程(掌握这些足够)

3.7 静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。...对于“.y”和“.l”也是同样的规则。 三、隐含规则使用的变量 隐含规则的命令,基本上都是使用了一些预先设置变量。...你可以在你的makefile改变这些变量的值,或是make的命令行传入这些值,或是在你的环境变量设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式。...还得要注意的是,这些变量只使用在规则的命令,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其隐含规则并没有意义。

2.6K20

Makefile 使用总结

模式规则,如果有多个目标,那么,"$@"就是匹配于目标模式定义的集合。 $%     仅当目标是函数库文件,表示规则的目标成员名。...$+     这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。 $*     这个变量表示目标模式"%"及其之前的部分。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式。...还得要注意的是,这些变量只使用在规则的命令,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其隐含规则并没有意义。 1..../header # 示例3 - 清除示例2设置规则 VPATH %.h # 示例4 - 清除所有VPATH的设置 VPATH 2.2 Makefile 变量 2.2.1 变量定义 ( = or

3.5K30

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

七、静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活 我们还是先来看一下语法: : : <prereq-patterns...“静态模式规则”的用法很灵活,如果用得好,那会一个很强大的功能。...而如果一个规则是以“.IGNORE”作为目标的,那么这个规则的所有命令将会忽略错误。这些是不同级别的防止命令出错的方法,你可以根据你的不同喜欢设置。...还有一个要提一下的make的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则的命令出错了,那么就终规则的执行,但继续执行其它规则。...不管全局的$(CFLAGS)的值是什么,prog目标,以及其所引发的所有规则(prog.o foo.o bar.o的规则),$(CFLAGS)的值都是“-g” 九、模式变量 GNU的make,还支持模式变量

3.1K20

如何使用MakefileUbuntu上自动执行重复任务

Makefile是特定于目录的,这意味着make将在调用它的目录搜索以查找这些文件。因此,我们应该将Makefile放在我们将要执行的任务的根目录,或者调用我们将要编写的脚本最有意义的地方。...附加功能 一些其他功能可以帮助您在Makefile创建更复杂的规则链。 变量 Make识别变量(或宏),它在makefile作为替换的简单占位符。最好在文件顶部声明这些内容。...:此变量包含当前目标的比目标更新的依赖项列表。这些将是执行此目标下的命令之前必须重新完成的目标。 $@:此变量是当前目标的名称。这允许我们引用您尝试制作的文件,即使此规则通过模式匹配。...对于后缀规则,这是用于创建目标的文件的名称。我们的示例,这将包含“file.jpg” $*:此文件是剥离匹配扩展名的当前依赖项的名称。将此视为目标文件和源文件之间的中间阶段。...如果没有.jpg文件,这实际上会尝试名为“*.jpg”的文件上运行转换命令,这将失败。 我们上面提到的通配符语法编译当前目录的.jpg文件列表,如果不存在,则不会将变量设置为任何内容。

2.3K00

qmake手册(Qt5.9.3)

这可以通过以下方式调用: make all 可以将build_all选项添加到项目文件的CONFIG变量,以确保默认情况下在两种模式下构建项目: CONFIG + = build_all 这允许使用默认规则处理...Makefile: make 两种模式下安装 build_all选项还可确保调用安装规则时安装两个版本的目标: make install 可以根据目标平台自定义构建目标的名称。...例如,添加QT变量以适应项目所需的模块。 您可以使用这些选项来指定常规和特定于模式设置。...指定项目目标的描述;这适用于应用程序的属性描述的情况。这只有VERSION或RC_ICONS变量设置并且RC_FILE和RES_FILE变量没有被设置时才被使用。...指定项目目标的产品;这适用于将产品放入应用程序的属性。这只有VERSION或RC_ICONS变量设置并且RC_FILE和RES_FILE变量没有被设置时才被使用。

5.2K20

【Linux】--- Linux编译器-gccg++、调试器-gdb、项目自动化构建工具-makeMakefile 使用

1.3 链接 – 动静态链接特点及区别 我们的C程序,并没有定义"printf"的函数实现,且预编译包含的"stdio.h"也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实"printf...break(b) 行号: 某一行设置断点。 break 函数名: 某个函数开头设置断点。 info break : 查看断点信息。 finish: 执行到当前函数返回,然后停下来等待命令。...make程序会读取makefile文件的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出。 Makefile里主要包含了五个东西:显式规则、隐晦规则变量定义、文件指示和注释。1....makefile可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上。4. 通常使用 $(var) 表示引用变量文件指示。...即命令——“make clean”,以此来清除所有的目标文件,以便重编译。 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY 修饰,伪目标的特性是,总是被执行的。

13220

6_Makefile与GCC

为了方便实验,我们Ubuntu中使用gcc来做实验,如果想使用交叉编译,参考章节《第二章1.2 安装SDK、设置工具链》,安装好工具链,设置好环境变量后,将所有的gcc替换为arm-linux- gcc...3) 静态库选项(-static) ​ 使用静态库。注意:命令行静态库夹在的库必须位于调用该库的目标文件之后。...6.5.3 自动变量 ​ Makefile的语法提供一些自动变量,这些变量可以让我们更加快速的完成Makefile的编写,其中自动变量只能在规则的命令使用,常用的自动变量如下: ​ 1)$@:规则的目标...6.5.4 模式规则模式规则实在目标及依赖中使用%来匹配对应的文件,我们依旧使用上面的例子,采用模式规则格式,如下: 01 CC = gcc 02 OBJ = main.o add.o sub.o...当一个目标被声明为伪目标后,make执行规则时不会去试图去查找隐含规则来创建它。这样就提高了make的执行效率,也不用担心由于目标和文件名重名了。 ​

3.5K10

Makefile 入门教程

变量 (Variables):变量用于存储文本或命令,并可以整个 Makefile 重复使用。 伪目标 (Phony Targets):伪目标是不代表实际文件的目标,而是用于执行特定操作的标记。...ifeq ($(VARIABLE), value) # 条件为真时的规则和命令 else # 条件为假时的规则和命令 endif 例如,可以根据是否定义了 DEBUG 变量设置不同的编译选项...); do \ $(MAKE) -C $$dir clean; \ done 在这个示例,SUBDIRS 变量包含了子目录的列表。...$(MAKE) 是一个 Makefile 的特殊变量,用于启动另一个 Makefile。 5.4 高级变量操作 Makefile 支持高级的变量操作,包括字符串操作、条件赋值、变量展开等。...变量展开 VAR1 = $(VAR2) VAR2 = value 在这个示例,VAR1 的值将是 value,因为 Make 会递归地展开变量

28220

Makefile学习1

文件时,会将具有相同目标的规则的依赖文件合并。...应用: 立即展开变量一般用在规则的目标、目标依赖make解析Makefile阶段,需要这些变量有确切的值来构建依赖关系树。...延迟展开变量一般用在规则的命令行,这些变量make编译过程中被引用到才会展开,获得其实际的值。 自动变量 Makefile,大家经常会见到类似 @、 ^、$<这种类型的变量。...,但是大家以后阅读Makefile时可能会遇到,比如: $%:当规则的目标是一个静态库文件时,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件重复出现的文件 $*:模式匹配和静态模式规则...模式匹配,表示目标模式%的文件名部分 -: :告诉make在编译时忽略所有的错误 @: :告诉make执行命令前不要显示命令 变量替换 字符串替换 .PHONY: all SRC := main.c

31110
领券