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

在GNU Make中强制变量扩展

GNU Make 是一个用于自动化编译和连接程序的工具,它可以根据指定的规则和依赖关系来执行相应的命令。在 GNU Make 中,变量扩展是指在评估变量值时,将变量名替换为其值的过程。

强制变量扩展是指在变量定义后,即使没有使用该变量,也会立即扩展该变量的值。这可以通过在变量名前加上 ! 符号来实现。例如:

代码语言:makefile
复制
VAR := value
VAR := new_value

all:
    @echo $(VAR)

在这个例子中,VAR 的值将被扩展为 new_value,因为它是最后一个定义的值。但是,如果我们使用强制变量扩展,如下所示:

代码语言:makefile
复制
VAR := value
!VAR := new_value

all:
    @echo $(VAR)

那么输出的结果将是 value,因为 !VAR 的定义被强制扩展,使得 VAR 的值被锁定为 value

这种强制变量扩展的方法在某些情况下非常有用,例如当我们需要确保某个变量的值不会被意外地改变时。

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

相关·内容

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

    makefile很重要       什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

    02

    Ubuntu下如何安装并使用Objective-C

    Objective-C是本人用过的最佳类C、面向对象的编程语言。Objective-C与标准C完美兼容,而在此基础上又加上了将面向对象的基础概念诠释得最好的SmallTalk元素,使得它既简洁、又灵活,绝对是做商业化项目的首先编程语言工具。它跟Java相比更接近底层,你可以直接在里面写内联汇编或直接与汇编文件一起连接(因为它就是C语言,在C语言基础上扩展了SmallTalk的消息机制与OO机制)。与C++相比,它显然又简洁许多,C++里的神马多继承了、虚拟继承了,坑之多数不尽。Objective-C非常容易上手,而且语法也不复杂,所以不会导致程序员出现过于良莠不齐的现象,整个项目维护起来也十分容易。

    00

    linux下源码安装

    源码安装:配置(configure)、编译(make)、安装(make install),所有操作中间错误可以忽略,最后段末尾统一报错。 ####1.配置  configure:生成Makefile的shell脚本  文件结构如下:   <文件夹>     |-configure.in     |-Makefile.am     |-acconfig.h     |-<源码文件>       |-tt.c       |-qq.c       |-qq.h       |-Makefile.am  其中configure.in作为./configure的配置输入;makefile.am通过automake生成makefile.in再由./configure生成makefile;acconfig.h由autoheader生成config.h.in再由./configure生成config.h  configure.h使用autoconf和automake命令的shell脚本,可以通过autoscan自动生成或手写  acconfig.h包含了configure.in中未定义的宏 autoscan–>autoheader–>aclocal–>automake|autoconf

    04

    phpize是什么

    安装php(fastcgi模式)的时候,常常有这样一句命令:/usr/local/webserver/php/bin/phpize 一、phpize是干嘛的? phpize是什么东西呢?php官方的说明: http://php.net/manual/en/install.pecl.phpize.php phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块 比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize,通过以下几步工作。 二、如何使用phpize? 当php编译完成后,php的bin目录下会有phpize这个脚本文件。在编译你要添加的扩展模块之前,执行以下phpize就可以了; 比如现在想在php中加入memcache扩展模块:我们要做的只是如下几步 ———————————————————————— tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5/ /usr/local/webserver/php/bin/phpize ./configure –with-php-config=/usr/local/webserver/php/bin/php-config make make install ———————————————————————— 注意./configure 后面可以指定的是php-config文件的路径 这样编译就完成了,还需要做的是在php.ini文件中加入extension值 extension = “memcache.so”

    03

    在群晖部署适用IPv6、Fullcone NAT的旁路由透明代理

    前一阵子把我曾经折腾的那套透明代理方案(细节可以看https://blog.kaaass.net/archives/1446)搬到了NAS上,不过由于众所周知的原因,文章就没在当时发出来。于是虽然都整了3个星期5个月了,现在才整理当时的各种操作。文章主要的操作是安装clash、supervisor、overture、ipt2socks、n2n、透明代理规则。如果不需要透明代理,那仅完成第1项或前2项就可以实现HTTP代理了。而后面配置的主要难点其实是iptables相关组件的安装,由于涉及到了内核组件编译,因此不建议没有编译经验的朋友尝试。另外,由于本篇文章只是记录了编译、配置的方法,所以大概会非常枯燥,还请见谅。

    01

    Linux下离线手动下载安装C++开发环境

    Linux下我们习惯了使用软件包管理器来安装我们需要的软件,比如Red Hat公司的Fedora、RHEL(Red Hat Enterprise Linux)和后来加入红帽的CentOS,使用rpm和yum来安装软件,Ubuntu使用apt-get来安装。 使用软件包管理器确实很方便,在联网的环境下,从下载到安装,以及自动关联软件的依赖项,并且一次安装所有依赖的软体包,为我们省去了很多繁琐的操作。这样确实很好,但是我们却失去了了解软件有哪些组成模块和依赖项的机会。下面我就要折腾一下,手动下载安装C++环境,摆托yum install gcc-c++ 这种傻瓜式操作。手动下载安装还有一个好处就是为不能联网的机器安装软件。有时候,确实要这样做。

    02
    领券