首页
学习
活动
专区
工具
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 也可以根据目标平台自定义构建目标的名字。

942100
  • 深度刨析makefile

    下面是常用的自动化变量列表 自动化变量 说明 $@ 代表目标文件,在模式规则中, $@ 就是目标中模式定义的相匹配的目标文件集合 $模式 % 定义的,那么 $模式的一系列的文件集...1.o, $@ 表示 1.a $+ 类似“$^”,但是它保留了依赖文件中重复出现的文件(主要用在程序链接时库的交叉引用场合),也就是说他也代表所有依赖文件,但是不会去除重复文件 $* 在模式规则和静态模式规则中...① 代表命令的隐含变量 隐含变量 变量代表的含义 AR 函数库打包程序,可用于创建静态库 .a 文件(我的 Linux 专栏动静态库文章中已详细介绍 ar 命令),默认命令是 ar AS 汇编语言编译程序...(5)模式规则 ① 什么是模式 模式规则也就是说在规则中存在模式匹配字符 % ,并且是一定要存在 % ,该字符用于对文件名进行匹配。...比如下面的例子,我们在 makefile 中并没有写以 1.o 为目标的规则,甚至都没有 1.o 这个目标,但是却可以通过 make 来指定 1.o 为最终目标,这是因为 make 根据隐含规则可以推导出

    13010

    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.9K20

    Linux 下的make命令与Makefile

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

    10.2K20

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

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

    4.3K20

    Make

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

    2K100

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

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

    2.8K20

    Makefile 使用总结

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

    3.6K30

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

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

    3.3K20

    如何使用Makefile在Ubuntu上自动执行重复任务

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

    2.4K00

    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.8K20

    【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 修饰,伪目标的特性是,总是被执行的。

    42920

    Makefile从入门到上手

    如果满足了生成目标的依赖,就不会再继续向下执行了。make 会自动寻找规则里需要的材料文件,执行规则下面的行为生成规则中的目标。...、三个自动变量和模式规则 ①、三个自动变量 $@ # 在规则的命令中,表示规则中的目标。...$^ # 在规则的命令中,表示所有依赖条件。组成一个列表,以空格隔开,如果这个列表中有重复项,则去重 $在规则的命令中,表示第一个依赖条件。...如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。...、静态模式规则 继续优化 makefile,使用静态模式规则,就是指定模式规则给谁用,这里指定模式规则给 obj 用,以后文件多了,文件集合会有很多个,就需要指定哪个文件集合用什么规则 $(obj

    40630

    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.6K10

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译的核心原理和最佳实践

    变量:makefile 中定义的变量,允许复用和动态设置。...特殊符号 在 makefile 中,% 是通配符,常用于模式规则(Pattern Rules),用于匹配文件名的通用模式。...模式规则让 make 能够定义一类目标的构建方式,而无需为每个目标单独编写规则。例如,可以用 %.o: %.c 来描述如何从 .c 文件生成 .o 文件,% 表示文件名的任意部分。...使用 % 的模式规则 以下是模式规则的典型结构: %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ 解释 %.o: %.c 表示所有 .o 文件都可以通过对应的 .c 文件生成...Makefile 中的配置 有时在 makefile 中的配置也会影响重新编译的条件,例如使用变量、条件语句和模式规则等。 总结 需要重新编译:当源文件、依赖文件发生变化,或者手动强制重新编译时。

    59450

    Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试

    静态链接 静态链接会将所需的库文件直接嵌入到生成的可执行文件中。 gcc -o output_file source.c -static -lm -static 表示使用静态链接。...make 是一个工具,用于根据指定的规则,自动化执行一系列命令(如编译代码)。 Makefile 是一个文本文件,定义了构建项目的规则、依赖关系和命令。...如果源文件没有变化,make 会输出 make: 'hello' is up to date.。 执行清理 make clean 执行 clean 目标的命令,删除 .o 文件和可执行文件。...%.o: %.c:通配规则,表示所有 .c 文件生成对应的 .o 文件。 3.5 Makefile 中的特殊符号和自动变量 符号/变量 作用 $@ 当前目标的名字。 $^ 所有依赖项的名字(去重)。...undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号。

    19510
    领券