1

以下是使用 MinGW msys 和 Cygwin 测试的。
在 makefile 中定义虚假目标 EXPORT_ALL_VARIABLES 然后执行子 make 时,不会导出带点的变量。
所以CFLAGS被导出,但CFLAGS.cppCFLAGS.c不是。

这是记录在案的功能吗?什么是理性?
有没有办法导出所有变量?

例子:

测试1.mak

CFLAGS=-O2
CFLAGS.cpp=-O2 -fno-rtti
all:
    $(MAKE) -f test2.mak
.EXPORT_ALL_VARIABLES:

test2.mak

$(info CFLAGS='$(CFLAGS)')
$(info CFLAGS.cpp='$(CFLAGS.cpp)')
all:
    @echo Done

输出:

make -f test1.mak 
CFLAGS='-O2'
CFLAGS.cpp=''
Done
4

1 回答 1

2

POSIX sh 中的环境变量不能包含“.”;试试看:

$ FOO.BAR=foobar
FOO.BAR=foobar: command not found

Make 只会导出对 shell 有效的变量。

GNU make 手册说:

If you use export by itself to export variables by
default, variables whose names contain characters other than
alphanumerics and underscores will not be exported unless specifically
mentioned in an export directive.

接着:

you can write a rule for the special target
.EXPORT_ALL_VARIABLES instead of using the export directive.

因此,该目标与单独使用相同export,并且具有相同的限制。

于 2013-06-02T15:06:00.603 回答