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 变量就可以了。


提问

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

目录
相关文章
|
网络协议 Linux
route 或 ip route命令详解
【4月更文挑战第9天】`route`和`ip route`是Linux下管理IP路由的命令,用于查看和配置路由表。`route`命令简单,可查看、添加和删除路由,而`ip route`更现代且功能强大,支持路由可信度和距离设置。`ip route show`类似于`route -n`用于显示路由信息。路由类型包括主机、网络和默认路由。在现代Linux系统中,推荐使用`ip route`。
1932 1
|
10月前
|
机器学习/深度学习 数据采集 TensorFlow
利用TensorFlow实现简单的图像分类模型
利用TensorFlow实现简单的图像分类模型
248 0
|
存储 监控 Cloud Native
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程(上)
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程
|
11月前
|
运维 定位技术 网络虚拟化
|
网络虚拟化 网络架构
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之对于已经上传的文件想要删除,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
JavaScript 内存技术
fnm 安装、卸载与使用(详细步骤)
fnm 安装、卸载与使用(详细步骤)
789 0
|
Shell C++ iOS开发
手把手将Visual Studio Code变成Python开发神器
手把手将Visual Studio Code变成Python开发神器
161 0
|
存储 内存技术
zynq操作系统: jffs2文件系统的错误异常
JFFS2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。
918 0
|
Linux
kworker
笔记
496 0