Makefile 中向下传参问题讨论

发现一个规律,凡是在上一级Makefile中这样执行:make -C xxx CFLAGS="$(CFLAGS)",那么在 xxx/Makefile 中对 CFLAGS 的设置就会不生效。

做个实验

建一个这样的目录:

Makefile 的内容:

CFLAGS=-I../xxx

all:
    @echo ---top:CFLAGS=$(CFLAGS)---
    make -C sub CFLAGS="$(CFLAGS)"

sub/Makefile 的内容:

CFLAGS+=-L/usr/include

all:
    @echo ---sub:CFLAGS=$(CFLAGS)---

我们在 sub/Makefile 中让 CFLAGS 追加了 -L/usr/include
按理解,sub/Makefile 的输出结果应该是:-I../xxx -L/usr/include,而实现输出的内容是 -I../xxx

证明 sub/Makefile 中 CFLAGS+=-L/usr/include 根本就没有生效。

规避方法

那应该怎么办呢? 尝试过了,将 Makefile 改成这样:

CFLAGS=-I../xxx
export CFLAGS

all:
    @echo ---top:CFLAGS=$(CFLAGS)---
    make -C sub

用 export 关键字来向下传 CFLAGS 变量就可以了。

提问

就算是规避了,但这个现象的根本问题是什么?如何解决?

时间: 2024-10-13 14:42:06

Makefile 中向下传参问题讨论的相关文章

C#中ref引用传参怎么用

protected void Page_Load(object sender, EventArgs e) { int value = 0;//初始值 Test(ref value); Response.Write(value.ToString());//值被改变,结果是9999 Response.End(); } protected void Test(ref int value) { value = 999; }C#中ref引用传参怎么用

关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

原文:关于SQL Server 2017中使用json传参时解析遇到的多层解析问题 开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式. 用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题. 今天在解析Json的多级参数遇到了点小问题,在此记录一下: 传参内容如下: 1 declare @json varchar(max)=N'{"Customer":36,"Positions":[{"I

jq中的ajax传参

    一.   jq中的Ajax传参有两种           1.通过url地址来传参    2.通过data来传递参数 1. url来传递参数 function GetQuery(id) { if (id ==1||id==7) { var name = "语文"; $.ajax({ url:"../ajaxHandler/ChartsHandler.ashx?id="+id+"&name="+name +"",

python中给函数传参是传值还是传引用

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

vue请求中 post get传参方式是不同的哦

我在学习vue,项目中post请求,get请求都用到了,我发现传参方式是不一样的. post请求的例子: checkin (){ this.$http.post('my url',{ mobilePhone:this.phone, password:this.password },{ emulateJSON: true } ).then(function(res){ this.$root.userid=res.data.userid; console.log(this.$root.userid)

wx.request中POST方法传参问题,用到JSON.stringify()

前面用到了get方法传参,现在post也需要传参传输内容进去,下面我来一步步研究: 遇到的问题: 传参进去后反馈参数为空,没有报错.错误代码如下: wx.request({ url: '某地址', method: "post", data: { msg: { "phone": "某电话", "content": this.data.text, "date":this.data.time } }, heade

(4)分布式下的爬虫Scrapy应该如何做-规则自动爬取及命令行下传参

本次探讨的主题是规则爬取的实现及命令行下的自定义参数的传递,规则下的爬虫在我看来才是真正意义上的爬虫. 我们选从逻辑上来看,这种爬虫是如何工作的: 我们给定一个起点的url link ,进入页面之后提取所有的ur 链接,我们定义一个规则,根据规则(用正则表达式来限制)来提取我们想要的连接形式,然后爬取这些页面,进行一步的处理(数据提取或者其它动作),然后循环上述操作,直到停止,这个时候有一个潜在的问题,就是重复爬取,在scrapy 的框架下已经着手处理了这些问题,一般来说,对于爬取过滤的问题,通

js中给正则传参、传递变量

js中验证字符串有时需要用到正则表达式,一般情况下直接写正则进行验证就行. 但是遇到需要把部分正则作为参数传递就麻烦一点,需要用到RegExp()对象. <script type="text/javascript"> window.onload = function () { var str = "123456789"; var pattern = "\^\[0-9\]"; var reg = new RegExp(pattern +

关于js 中函数的传参

var a = 100; function test(a){ a++; //a(形参)是局部变量 console.log(a); } test(a); console.log(a); //结果是 101 100; 函数的参数是属于函数内部变量,外部无法访问到,即使与外部变量同名;它们也是两个不同的变量 类似于:var a = 100; function test( ){ var a=100;   //a是局部变量 a++; console.log(a); } test( ); console.l