所有
我正在尝试从命令行传递变量。我的命令在
之下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
答案 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的输出,那么我们可以提供更多帮助。
干杯!