防止在Makefiles中重写变量?
我正在学习Makefiles和应用程序交叉编译,我想找到一种方法来防止变量在Makefiles中被重新定义 例如,我编写了一个顶级Makefile/usr/src/someapp.mk,它将 1) 将应用程序的源代码从web下载到/usr/src/someapp-1.2.3中/ 2) 解开源头,以及 3) 运行其原始/usr/src/someapp-1.2.3/Makefile 由于原始Makefile是作为独立脚本编写的,因此它会在不知情的情况下(重新)使用本地值定义常见的可疑对象(CC、AR/RANLIB等),从而有效地删除我在顶级Makefile中选择的值:防止在Makefiles中重写变量?,makefile,Makefile,我正在学习Makefiles和应用程序交叉编译,我想找到一种方法来防止变量在Makefiles中被重新定义 例如,我编写了一个顶级Makefile/usr/src/someapp.mk,它将 1) 将应用程序的源代码从web下载到/usr/src/someapp-1.2.3中/ 2) 解开源头,以及 3) 运行其原始/usr/src/someapp-1.2.3/Makefile 由于原始Makefile是作为独立脚本编写的,因此它会在不知情的情况下(重新)使用本地值定义常见的可疑对象(CC、AR
#My top-level /usr/src/someapp.mk:
all:
wget someapp-1.2.3.tar.gz
tar xzvf someapp-1.2.3.tar.gz
cd someapp-1.2.3 && $(MAKE)
#Original Makefile from www /usr/src/someapp-1.2.3/Makefile:
#RANLIB locally redefined... :-/
RANLIB=ranlib
all:
$(RANLIB)...
我希望用户能够下载原始源代码,而不是提供我自己的、修改过的版本:有没有办法让“make”在本地重新定义变量时忽略它们,或者动态地重写它们
谢谢。如果变量未设置,
?=
运算符将仅定义变量
VAR ?= value
到目前为止,最有用的方法是在make命令行上定义变量。这些变量在make期间变为只读
$ cat Makefile
VAR := hello
$(error [${VAR}])
然后
但是
这表明您的代码段
cd someapp-1.2.3&&$(MAKE)
变成$(MAKE)-C someapp-1.2.3 RANLIB=myval
通过MAKE命令行覆盖makefile分配传递的MAKE变量
按如下方式调用该第三方makefile:
$ make ... RANLIB=myranlib CC=mycc
谢谢。我将尝试?=重写,除非用GNU Make中的
override
指令更新。
$ make VAR='value overridden'
Makefile:2: *** [value overridden]. Stop.
$ make ... RANLIB=myranlib CC=mycc