制作:变量赋值

时间:2019-03-06 12:54:54

标签: makefile gnu-make

从包含的其他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'丢失了。

谢谢!

1 个答案:

答案 0 :(得分:0)

您将EXTLIBS设置为目标extlib32的{​​{3}}。这样的变量是非全局变量,它们的值仅在目标配方和目标对象的先决条件中可用,而不是全局变量(这就是$(info $(EXTLIBS))不显示期望值的原因。)

要打印其值,您需要从目标extlib32的配方中打印它,例如:

extlib32:
    @echo "EXTLIBS=${EXTLIBS}"

如果extlib32extlib64.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 

target-specific variable