从包含的其他makefile访问变量时,我遇到了问题。
我有带有变量LIBS32的test.mak:= $(TESTLIBS)/ $(NEW_PLAT32) 我已经将test.mak包含在其他makefile中,并试图在目标之一中分配该变量。
extlib32: EXTLIBS = $(LIBS32)
extlib64: EXTLIBS = $(LIBS64)
EXTLIBS的期望值应为'/ home / testlib / extlibs / Linux'。但是在这里,当我打印EXTLIBS时,我看到的值是'/ home / testlib / extlibs /'
注意:-当我突出打印LIBS时,我可以看到预期的内容。但是当我分配给EXTLIBS并尝试使用它时。.我可以看到单词'Linux'丢失了。
谢谢!
答案 0 :(得分:0)
您将EXTLIBS
设置为目标extlib32
的{{3}}。这样的变量是非全局变量,它们的值仅在目标配方和目标对象的先决条件中可用,而不是全局变量(这就是$(info $(EXTLIBS))
不显示期望值的原因。)
要打印其值,您需要从目标extlib32
的配方中打印它,例如:
extlib32:
@echo "EXTLIBS=${EXTLIBS}"
如果extlib32
和extlib64
是.PHONY
的构建目标,则您最初针对目标的分配应传播到依赖项,并在其配方中可用。您只是无法从全局Makefile作用域中打印其值。
要使一个makefile在32位和64位模式下(以及发行和调试)进行构建,您需要以不同的方式构造该文件,并分别为每种构建模式调用make
。示例:
# User can overrided capitalized variables. E.g.
# make BUILD=release MODE=32 LDLIBS=-lrt
BUILD := debug
MODE := 64
build_dir := ${BUILD}/${MODE}
ldlibs.32 := my-32-bit-libs
ldlibs.64 := my-64-bit-libs
ldlibs := ${ldlibs.${MODE}} ${LDLIBS}
all :
@echo "build_dir=${build_dir}"
@echo "ldlibs=${ldlibs}"
用法示例:
$ make
build_dir=debug/64
ldlibs=my-64-bit-libs
$ make BUILD=release MODE=32
build_dir=release/32
ldlibs=my-32-bit-libs