问题描述
我有一个Makefile
,仅包含项目级定义:要使用的源文件,要创建的二进制文件或库等。
它包括../../Make.Arch
用于特定于体系结构的定义(例如编译器命令)。
反过来,Make.Arch
的意思是包含../etc/Makefile.Standard
,用于使make系统正常工作的所有样板。
但是include
需要相对于Makefile实际运行位置(或第一个Makefile所在的位置)的路径,而不是相对于第二个Makefile的路径。
解决方法
Make解释工作目录(运行Make的目录)中的相对路径。您尚未指定运行Make的方式,所以我假设您使用Makefile
在目录中运行它。
如果允许您修改Makefile,则可以更改路径。
您可以为此更改Make.Arch
:
include ../etc/Makefile.Standard
对此:
include ../../../etc/Makefile.Standard
,但这将要求所有使用Make.Arch
的makefile都必须位于其下两个目录中。显然这不是一个好主意。但是我们可以使用一个变量:
include $(ARCH_DIR)/../etc/Makefile.Standard
由Makefile
(或使用Make.Arch
的任何其他makefile)提供的:
ARCH_DIR := ../..
include $(ARCH_DIR)/Make.Arch
如果不允许修改makefile,则必须作弊。一种方法是创建指向Makefile.Standard
的符号链接。
mkdir ../etc
ln -s ../../../etc/Makefile.Standard ../etc
现在Makefile
将起作用。 (应该可以链接到etc/
,但是由于某些原因,我现在无法使它正常工作。)