Makefile中变量的定义、引用与赋值

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

Makefile文件中的变量有很多种类,其意义各不相同。比如普通变量、环境变量,自动变量,模式指定变量等。

这里主要讲普通变量的定义与使用。

一、变量的定义与引用

定义变量的基本语法如下:

varaible_name=Var1 Var2 ……
  • 变量的名称可以由大小写字母、阿拉伯数字和下划线构成。
  • 等号左右的空白符没有明确的要求,因为在执行 make 的时候多余的空白符会被自动的删除。
  • 至于值列表,既可以是零项,又可以是一项或者是多项。

引用变量,可以用 "$(varaible_name)" 或者 "${varaible_name}" 。

实例:

OBJ=main.o test.o test1.o test2.o
test:$(OBJ)gcc -o test $(OBJ)

二、变量的赋值方式

(1)简单赋值 ( := )

编程语言中常规理解的赋值方式,只对当前语句的变量有效。

换句话说,前面你对这个变量怎么赋值的我不管,我在这里对它赋值,那它就等于我赋给它的值。

x:=foo
y:=$(x)b
x:=new
test:@echo "y=>$(y)"@echo "x=>$(x)"

在 shell 命令行执行make test,得到:

y=>foob
x=>new

(2)递归赋值 ( = )

赋值语句可能影响多个变量,所有与目标变量相关的其他变量都受影响。

换句话说,这个变量(假如为A)的值由最后一条赋值语句决定,所有引用这个变量(A)的其他变量(假如为B),就算它(B)出现在这个变量(A)的最后一条赋值语句之前,也要受到这个变量(A)最后一条赋值语句的影响。

x=foo
y=$(x)b
x=new
test:@echo "y=>$(y)"@echo "x=>$(x)"

在 shell 命令行执行make test,得到:

y=>newb
x=>new

(3)条件赋值 ( ?= )

如果变量未定义,则使用符号后的值定义变量。如果该变量已经赋值,则该赋值语句无效。

换句话说,这个变量定义没有?没有的话我就给你定义,已经定义的话,你就用原来的定义吧。

x:=foo
y:=$(x)b
x?=new
test:@echo "y=>$(y)"@echo "x=>$(x)"

在 shell 命令行执行make test,得到:

y=>foob
x=>foo

(4)追加赋值 ( += )

原变量用空格隔开的方式追加一个新值。

x:=foo
y:=$(x)b
x+=$(y)
test:@echo "y=>$(y)"@echo "x=>$(x)"

在 shell 命令行执行make test,得到:

y=>foob
x=>foo foob

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

address already in use: jvm_bind

这是用Myeclipse写网上书店时遇到的错误,错误的意思是8080端口被占用,解决问题的方式是找到占用8080端口的进程关闭就可以了, 在dos下输入netstat -ano 即可查看所有的 然后根据PID关闭进程,在任务管理器中,找到进转载…

case when then的用法

用法一:等值判断,相当于switch CASE expression   WHEN value1 THEN returnValue1   WHEN value2 THEN returnValue2   WHEN value3 THEN returnValue3   ELSE defaultValue END 例子:论坛中用户的等级 create table [user] (uId int…

Makefile中的自动化变量

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 自动化变量,可以理解为由 Makefile 自动产生的变量。 在模式规则中,规则的目标和依赖的文件名代表了一类的文件。在 Makefile 中描述规则时,依赖文件…

Makefile中的文件搜索路径(VPATH和vpath)

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 前言 当源文件与 Makefile 文件的存放路径不同时,如何将源文件的路径告知Makefile文件呢? 方法有两种:一般搜索VPATH,选择搜索vpath。 两…

今天是我开通博客的第一天

The first time I regist my blog.转载于:https://www.cnblogs.com/binquan/p/3417169.html

mysql导入sql文件过大或连接超时的解决办法

原文:mysql导入sql文件过大或连接超时的解决办法 前段时间出差在现场开发的时候,导入数据库老是出问题。最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了。至今屡试不爽。 set global max_allowed_packet100 000 000; set glob…

Makefile中的条件判断

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 日常使用 Makefile 编译文件时,可能会遇到需要分条件执行的情况。比如在一个工程文件中可编译的源文件很多,但是它们的类型是不相同的,所以编译文件…

SSH框架介绍

SSH 为 strutsspringhibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。 定义 集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的We…

Find Minimum in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 思路:如果中间节点的值最大,则取后半…

Makefile的伪目标

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 伪目标,它的目的并不是创建目标文件(所以称作“伪”),而是想去执行这个目标下面的命令。它有点像汇编语言里的标签。 使用伪目标的原因&…

Makefile中的文件包含

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 Makefile 中包含其他的文件,使用的关键字是 "include"。 make 读取到 "include" 关键字时,会暂停读取当前的 Makefile,转去读取…

Eclipse高级使用技巧

1. Eclipse的配置文件导入和导出功能 说明:可以将Eclipse的自定义的工作空间配置文件导出和导入,这样创建多工作空间时候就省去了再设置的烦恼。 2. Eclipse设置显示行号 说明:设置文件现实行号,调试错误的…

hadoop hive 的安装问题

origin: http://blog.163.com/songyalong1117126/blog/static/1713918972014124481752/hadoop hive 的安装问题 2014-02-24 16:10:13| 分类: hadoop|举报|字号 订阅能了一下午终于把hive搞好了,其中出现很多的问题1、hadoop和hive的版本问题&#xff0…

熬之滴水成石:最想深入了解的内容--windows内核机制(6)

58 进程和线程(3) 说完进程再说说线程,线程相比于进程其实有更多可说的内容。首先实现线程调用的数据结构是个栈,该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址。线程肯定是属于某个进程,其控制流可以访…

Google搜索技巧总结

http://blog.sciencenet.cn/blog-44407-229042.html转载于:https://www.cnblogs.com/aze-003/p/4105261.html

【linux】学习6

鸟哥13章的东西 shell script速度较慢,适合用于系统管理,但不适合处理大量数值运算 var$((运算内容)) 可以用来做变量的加减乘除求余运算 total$(($firstnum*$secnu)) declare -i total"$firstnum*$secnu" 上面两句功能一样,建议用…

Makefile嵌套执行make

概述 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则。如果在一个 Makefile 文件中描述所有模块的编译规则,就会显得很杂乱,执行时也会很不方便。 如果在不同的模块中分别…

core--线程同步(内核模式)

什么是内核?windows操作系统为了更好的管理进程,线程,创建了很多数据结构,这些数据结构运行在windows的底层,并不开放给开发人员;所以开发人员称这些结构为内核,但是为了开发人员能够使用&#…

hive cli启动判断hadoop version的问题

测试环境的hive cli启动时报错:Unable to determine Hadoop version information.hive是一个shell:使用sh -x跟踪运行过程,可以看到其通过hadoop version获取hdfs的版本相关的代码如下:# Make sure were using a compatible version of Hadoo…

Makefile变量的高级用法:变量的替换引用、变量的嵌套使用

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 我们之前已经学习过变量的定义和基本的赋值运算,我们可以更深入的了解一下变量的一些高级的用法。高级使用方法有两种:第一种是变量的替换引用,第二…