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

10100649_BSkV.jpg

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


规避方法

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


CFLAGS=-I../xxx
export CFLAGS
 
all:
    @echo ---top:CFLAGS=$(CFLAGS)---
    make -C sub

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

10100649_Qm6c.jpg

提问

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

目录
相关文章
|
4月前
|
C语言 C++
第一个c语言程序
第一个c语言程序
VC8 常用代码汇编 返回值,入参,全局变量
VC8 常用代码汇编 返回值,入参,全局变量
|
3月前
|
存储 API C语言
C语言函数大全--f开头的函数(上)
【6月更文挑战第7天】本篇介绍 C语言中 f 开头的函数(上篇)【C语言函数大全】
47 3
C语言函数大全--f开头的函数(上)
|
3月前
|
存储 Linux Serverless
C语言函数大全--d开头的函数
【6月更文挑战第5天】本篇介绍 C语言中 d开头的函数【C语言函数大全】
42 1
C语言函数大全--d开头的函数
|
4月前
|
C语言
C语言函数嵌套与递归调用的深入解析
C语言函数嵌套与递归调用的深入解析
47 0
C4.
|
4月前
|
Serverless C语言
C语言函数的嵌套调用
C语言函数的嵌套调用
C4.
100 0
|
4月前
|
自然语言处理 前端开发 安全
【面试题】ES6语法五之箭头函数
【面试题】ES6语法五之箭头函数
|
移动开发 小程序 JavaScript
uniapp进行条件编译的两种方法?小程序端和H5的代表值是什么
在 UniApp 中,可以使用条件编译来根据不同的平台(小程序、H5 等)进行不同的代码处理。有两种主要的方法来实现条件编译:使用 mp 属性和条件注释。
|
编译器 C语言
【C语言】 函数(下):函数的嵌套调用 -- 链式访问 -- 声明 -- 定义 -- 递归 -- 练习1
【C语言】 函数(下):函数的嵌套调用 -- 链式访问 -- 声明 -- 定义 -- 递归 -- 练习1
|
算法 编译器 C语言
【C语言】 函数(下):函数的嵌套调用 -- 链式访问 -- 声明 -- 定义 -- 递归 -- 练习2
【C语言】 函数(下):函数的嵌套调用 -- 链式访问 -- 声明 -- 定义 -- 递归 -- 练习2