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

Gnu make: ifeq和$*

Gnu make是一个常用的构建工具,用于自动化构建和管理软件项目。ifeq和$*是Gnu make中的两个关键字和变量,用于条件判断和获取目标文件名。

ifeq是一个条件判断关键字,用于判断两个变量是否相等。它的语法如下: ifeq (arg1, arg2) # 条件成立时执行的命令 else # 条件不成立时执行的命令 endif

$是一个自动化变量,用于获取目标文件名(不包括文件扩展名)。它在规则中使用,表示目标文件的名称。例如,如果目标文件是"main.o",那么$的值就是"main"。

下面是对ifeq和$*的详细解释和示例:

ifeq条件判断: ifeq用于判断两个变量是否相等。如果相等,则执行条件成立时的命令;否则,执行条件不成立时的命令。

示例:

代码语言:txt
复制
ifeq ($(VAR),value)
    # VAR变量的值为"value"时执行的命令
else
    # VAR变量的值不为"value"时执行的命令
endif

$目标文件名变量: $是一个自动化变量,用于获取目标文件的名称(不包括文件扩展名)。它通常在规则中使用,表示目标文件的名称。

示例:

代码语言:txt
复制
%.o: %.c
    gcc -c $< -o $*.o

上述示例中,%.o: %.c是一个规则,表示将所有的.c文件编译成对应的.o文件。$<表示依赖文件(.c文件),$*.o表示目标文件(.o文件)的名称。

总结: Gnu make是一个常用的构建工具,ifeq关键字用于条件判断,$*变量用于获取目标文件名。通过合理使用这些功能,可以更好地管理和构建软件项目。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Real-Time Render):https://cloud.tencent.com/product/trr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GNUGPL

Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件软件,可以被称为GNU/Linux。...GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。以及大部分UNIX系统的程序库工具。...许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到WindowsMac OS上。...主要工作: GNU 自由软件基金会最早的目的在于促进自由软件的开发,但自由软件基金会也有自己的GUN项目 发布并管理许可证 自由软件基金会具有发布GNU通用公共许可证其它GNU许可证的能力资源,但自由软件基金会只对它拥有版权的软件负责...自由软件基金会还发布了GNU宽通用公共许可证GNU自由文档许可证 监督版权 自由软件基金会拥有大多数GNU软件一些非GNU自由软件的版权。

1K10

makemake allmake clean的使用方法

刚接触Linux,认为直接make后就完成了编译,没想到编译出的结果存在很大问题,原来是makemake allmake clean的使用方法不对。...1、理论 makemake all make clean 是在使用 make 构建系统时常见的命令。它们用于编译管理项目中的代码。...如果第一个目标依赖于其他目标,make 会先构建这些依赖目标。 使用场景:通常用于编译链接项目中的代码。如果没有指定目标,make 会尝试编译链接整个项目。...make clean:清理项目,删除之前构建过程中生成的文件,准备一个干净的构建环境。 2、实践 让我们通过一个具体的例子来解释 makemake all make clean 的功能区别。...、make allmake clean呢?

2.1K10

Makefile学习2

ifeq后面的比较语句使用小括号抱起来,ifeq小括号之间要用空格隔开,小括号里的两个参数用逗号隔开。当小括号里的条件满足时,make就会执行这个分支的命令,否则执行else部分。...ifeq一般变量结合使用: mode = debug hello: hello.c ifeq ($(mode),debug) @echo "debug mode" gcc -g -o...ifndef 关键字 ifndef关键字ifdef相反,如果一个变量没有定义,表达式为真。 Makefile函数 GNU make 提供了大量的函数用来处理文件名、变量、文本命令。...函数的使用变量引用的展开方式相同: $(function arguments) ${function arguments} 注意: 函数主要分为两类:make内嵌函数用户自定义函数。...对于 GNU make内嵌的函数,直接引用就可以了;对于用户自定义的函数,要通过make的call函数来间接调用。 函数参数列表之间要用空格隔开,多个参数之间使用逗号隔开。

30810

Makefile条件推断 ——————————【Badboy】

使用条件推断,能够让make依据执行时的不同情况选择不同的执行分支。 条件表达式能够是比較变量的值,或是比較变量常量的值。   ...一、演示样例   以下的样例,推断$(CC)变量是否”gcc”,假设是的话,则使用GNU函数编译目标。   ...我们能够从上面的演示样例中看到三个keyword:ifeq、elseendif.ifeq的意思表示条件语句的開始。并指定一个条件表达式,表达式包括两个參数。以逗号分隔,表达式以圆括号括起。...第一个是我们前面所见过的”ifeq”   ifeq (, )   ifeq” ”   ifeq”” “”   ifeq”” ”   ifeq” “”   比較參数”arg1″”arg2″的值是否同样。...參数中我们还能够使用make的函数。如:   ifeq ((strip (foo)),)   endif   这个演示样例中使用了”strip”函数。

49720

linux下源码安装

源码安装:配置(configure)、编译(make)、安装(make install),所有操作中间错误可以忽略,最后段末尾统一报错。...=':(已被赋值的变量不赋值) '+=':(追加赋值,**makefile变量值都是字符串**) 变量引用:$(变量) makefile条件选择: ifeq 'arg1' 'arg2'或ifeq (...install,安装文件到usr/bin下   (卸载使用make uninstall,清理make产生的缓存文件使用make clean) ####4.软件包管理工具  linux分为桌面系统领域和服务器系统领域...,服务器系统如:rethat、suse、gentoo、arch、fedora、国产中标麒麟;桌面系统如:centos、ubuntu  linux软件包分为两大阵营:RPMDPKG,与bin安装源码安装相比...,管理包工具使用数据库方式管理软件包包的依赖项,安装路径系统默认   RPM(rpm包文件,yum自动解决依赖关系,rpm安装需要解决依赖关系)   DPKG(debian包文件,遵循GNU规范,

7K41

make命令makefile文件

大家好,又见面了,我是全栈君   make命令makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录。   ...makefile文件由一组依赖关系规则构成,每个依赖关系由一个目标一组该目标所依赖的源文件组成,而规则描述了如何通过这些依赖文件创建目标,一般来说,目标是一个单独的可执行文件。...1. make命令的选项参数   make程序本身有许多选项,其中最常用的三个选项如下所示: (1)-k:让make命令在发现错误时仍然继续执行 (2)-n:让make命令输出将要执行的操作步骤,而不真正执行这些操作...依赖关系 myapp: main.o 2.o 3.o main.o: main.c a.h 2.o: 2.c a.h b.h 3.o: 3.c b.h c.h   依赖关系定义了最终应用程序里的每个文件源文件之间的关系...myapp myapp.1   建议约定:在自己的makefile文件中将第一个目标定为all,然后再列出其它重属目标 1.2 规则   makefile文件中一个非常奇怪而又令人遗憾的语法现象:空格制表符是有区别的

2.6K40

GNUGPL的区别关系

GUN:GNU's Not UNIX的缩写,是一项运动。是1983年Richard Stallman针对UNIX走向闭源和和收费后发起的运动,旨在打造出一套完全开源免费的操作系统。...为了更好地实施GNU运动,Richard Stallman在1985创立了自由软件基金会(Free Software Foundation)为GNU计划提供技术、法律以及财政支持。...GNU具体的软件成果包括GCC、Emacs以及GNOME等以G开头的软件,全部可查看http://www.gnu.org/software/software.htmlGPL:GNU General Public...是GNU运动为保证其软件在后续的发展中仍保持开源开放而为其软件设立的“使用条款”。其最大的特点是要求任何人基于使用了GPL许可证发行的软件修改而成的软件都必须开源,可查看GPL许可证原文。...当然不只GNU自己的软件可以使用GPL,任何其他软件如果想都可以使用GPL,比如Linux就使用GPL(Linux不是GNU的成果,就好比你去看球你不一定要是龙之队的成员)

1.9K20

golang工程通用构建方式

要解决上述的问题,我们需要一个构建脚本/工具来自动化的在开发、持续集成、预发布阶段提供下列功能: 提供无学习成本的简单命令完成编译(make build)、嵌入文件(make asset)、代码生成(make...gen)、本地执行(make run)、单元测试(make test)、清理(make clean)、制作镜像(make image)等诸多动作; 在构建开始前能检查各种依赖的工具/环境是否符合条件,...等工具来支持上述的诉求: bash脚本跨平台不友好; bazel不好用我也不无脑粉google神教; maven/gradle的golang插件对没有java经验的团队成员学习成本高; 跟随社区大流,使用gnu...must be set prior to including golang.mk) endif ifeq ($(origin PLATFORM), undefined) ifeq ($(origin...linux amd64 ===========> Building binary app2 a6ac381 for linux amd64 仅编译app1的windowslinux的64位可执行程序:

2.1K61

聊聊golang的makenew函数

今天在聊makenew函数之前,咱们先来看一种现象 当然如果你对golang的指针还不是很了解,可以先看看这篇文章,以做到无缝连接 看完这个,我彻底理解了golang的指针 case1 var a...如果想赋值的话,需要用new或者make函数向系统提前申请内存才行。...makenew的区别 makenew都是用来内存分配的方法,简单的说,new只分配内存, 「make用于slice,map,channel的初始化,不仅可以开辟一个内存,还能给这个内存的类型初始化其零值...」 make返回的还是引用类型本身;而new返回的是指向类型的指针。...make func make(t Type, size ...IntegerType) Type new func new(Type) *Type make只能用来分配及初始化类型为slice,map

28120

Linux之makemakefile及其拓展

文章目录 makemakefile 基础知识 make/makefile的使用 伪目标 三个时间 推导规则 小程序进度条 缓冲区问题 倒计时程序 进度条 makemakefile 基础知识...make是一个命令,makefile是一个文件 make/makefile的使用 系统本身并没有makefile,需要我们自己创建makefile文件(也可以叫Makefile)。...该文件中主要写依赖关系依赖方法: 注意: 有了makefile文件,make命令才能派上用场,保存退出makefile文件后在终端输入make命令就能完成自动编译 这个时候你可能有一个疑问:...makefile默认只执行第一个依赖方法,如果你要执行clean可以使用make+依赖关系 那么为什么要有依赖关系依赖方法?...会失败,但是多次make clean却能一直成功?

3.8K00

Golang中makenew的区别

比如,对于bool类型,零值为false;int的零值为0;string的零值是空字符串 make: func make(t Type, size ...IntegerType) Type 同样用于内存分配...,但new不同,make用于channel,slicemap的分配,而且返回的类型就是这三个类型本身,而不是它们的指针,因为这三种类型本身就是引用类型,所以就没必要返回他们的指针了。...具体而言,有如下几种用法: (1)make(map[string]string):即缺少长度的参数,只传类型,这种用法只能用在类型为map或chan的场景 (2)make([]int, 2):指定了长度...,例如make([]int, 2)返回的是一个长度为2的slice (3)make([]int, 2, 4):既指定了长度len为2,又指定了cap为4 注意:由于这三种类型都是引用类型,所以必须得初始化

72130

go 为什么要有new make

go 为什么要有new make Go 语言就会根据变量的类型自动分配相应的内存。 值类型 对于基础类型,go语言会根据类型自动分配内存,并赋值这个类型的零值。...如果简单的使用new返回一个*hmap, 并不能很好的使用,这个使用就需要用make函数 m:=make(map[string]int,10) make函数类似于工厂方法,创建一类相同结构的类型。...总结 new 函数只用于分配内存,并且把内存清零,也就是返回一个指向对应类型零值的指针 make 函数只用于 slice、chan map 这三种内置类型的创建和初始化,因为这三种类型的结构比较复杂...,比如 slice 要提前初始化好内部元素的类型,slice 的长度容量等 所以综上: 1. new 是为了解决引用类型,也就是指针刚开始指向一个nil,需要分配内存空间才能使用这个问题设计的 2....make 是为了解决光new一块空间后并不能达到目标,还需要添加长度、容量等其他条件才能使用,所以设计了make函数。

76240
领券