从命令行传递变量?

时间:2012-05-11 15:51:40

标签: makefile

所有

我正在尝试从命令行传递变量。我的命令在

之下
make ARCH=arm CROSS_COMPILE=/my_dir/bin/arm-openwrt-linux-g++

我收到的错误是

g++: error: arm: No such file or directory

但文件'arm-openwrt-linux-g ++'确实存在。

我认为问题是我需要将varibale传递给sub-make文件。可以帮助一些如何从命令行将varialbes传递给sub-makefile的示例。我已经尝试使用-e和导出选项进行make,但是看不到任何可以工作的东西。

由于

makefile的内容:

# GNU Make solution makefile autogenerated by Premake
# Type "make help" for usage help

ifndef config
config=debug
endif
export config

    PROJECTS := json openjaus

.PHONY: all clean help $(PROJECTS)

all: $(PROJECTS)

json: 
@echo "==== Building json ($(config)) ===="
@${MAKE} --no-print-directory -C .build -f json.make

openjaus: json
    @echo "==== Building openjaus ($(config)) ===="
    @${MAKE} --no-print-directory -C .build -f openjaus.make

2 个答案:

答案 0 :(得分:0)

以下是我认为需要发生的事情:

您需要确保您的子文件实际上尊重$(ARCH)$(CROSS_COMPILE)变量。它们也是由Premake生成的吗?如果是这样,它是如何处理交叉编译的?检查文档。

在我的测试中(下面),我发现在命令行上设置的变量会传播到子品牌,这让我觉得你的子文件不符合$(ARCH)

生成文件:

a:
        $(MAKE) -C z

Z /生成文件:

a:
        @echo "MAKE=$(MAKE)"
        @echo "ARCH=$(ARCH)"

不带参数运行make

$ make
make -C z
make[1]: Entering directory `/home/foo/test/z'
MAKE=make
ARCH=
make[1]: Leaving directory `/home/foo/test/z'

正在运行make ARCH=bar

$ make ARCH=bar
make -C z
make[1]: Entering directory `/home/foo/z/z'
MAKE=make
ARCH=bar
make[1]: Leaving directory `/home/foo/z/z'

答案 1 :(得分:0)

因此,您的问题与通过命令行发送变量无关。

您的问题是,在子目录中的一个makefile中,您没有向我们展示过,您使用变量$(ARCH)的方式不正确,以至于命令行的扩展不是合法的g++命令行。

根据错误消息,您很可能会在不应该的位置添加空格,因此您需要-fmarch=arm而不是-fmarch= arm。显然这只是一个例子,因为你没有提供足够的信息。

另一个注意事项:我们无法知道您的makefile是如何工作的,但通常支持像CROSS_COMPILE这样的变量的makefile期望它只被设置为交叉编译命令的前缀;在你的情况下,它将是CROSS_COMPILE=/my_dir/bin/arm-openwrt-linux-。但是,你的makefile可能会有所不同。

在提问时,最好不要立即跳到对答案的猜测。首先描述问题,包括在它之前显示错误行以及几行。例如,在这种情况下,您从g++收到错误,因此打印出来的命令行向您展示它如何调用g++会有很大帮助。

一旦你给出了潜在的细节,那么如果你认为你已经知道问题是什么,并提出建议,和/或询问它。

如果您提供调用g++的规则和/或显示g++命令行的make的输出,那么我们可以提供更多帮助。

干杯!