1

全部,

我正在尝试从命令行传递要 make 的变量。我的命令在下面

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

我收到的错误是

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

但是文件“arm-openwrt-linux-g++”确实存在。

我认为问题是我需要将变量传递给子制作文件。可以提供一些有关如何从命令行将变量传递给子生成文件的示例的帮助。我尝试使用 make 的 -e 和导出选项,但看不到任何工作。

谢谢

生成文件的内容:

# 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
4

2 回答 2

0

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

您需要确保您的子 makefile 确实尊重$(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'
于 2012-05-11T21:42:11.823 回答
0

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

您的问题是,在您未向我们展示的子目录中的一个生成文件中,您以不正确的方式使用变量 $(ARCH) 使得命令行的扩展不是合法g++命令线。

根据错误消息,您很可能在不应该在的地方添加了一个空格,而不是像-fmarch=arm您得到-fmarch= arm. 显然这只是一个示例,因为您没有提供几乎足够的信息。

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

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

一旦你给出了基本的细节,那么如果你认为你对问题所在有一个想法,请继续提出建议,和/或询问它。

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

干杯!

于 2012-05-11T22:47:32.870 回答