Makefile 错误 - “***缺少分隔符”和“***配方在第一个目标之前开始”
Makefile Errors - "***missing separator" & "***recipe commences before first target"
我正在尝试为 os161 构建用户区。当我在命令行中键入 make 时,出现以下错误:
Makefile 24: ***missing separator (did you mean TAB instead of 8 spaces?). Stop.
我检查了第 24 行的 Makefile 并尝试在该行的开头添加一个 TAB,但这没有用,因为我随后收到另一个错误:
Makefile 24: ***recipe commences before first target. Stop.
完整的 makefile 供参考:
#
# Toplevel makefile for OS/161.
#
#
# Main rules:
# all (default): depend and compile system; install into staging area
# rebuild: likewise, but start with a clean slate.
# fullrebuild: likewise, but start with a very clean slate.
#
# What all does, in order:
# tools: depend and compile the tools used in build.
# includes: install header files.
# build: depend and compile the system.
#
# Other targets:
# depend: just update make dependency information.
# tags: generate/regenerate "tags" files.
# install: install into $(OSTREE).
# clean: remove generated files.
# distclean: remove all generated files.
#
TOP=.
.include "$(TOP)/mk/os161.config.mk"
all:; # make this first
MKDIRS=$(OSTREE)
.include "$(TOP)/mk/os161.mkdirs.mk"
all: tools .WAIT includes .WAIT build
rebuild:
$(MAKE) clean
$(MAKE) all
fullrebuild:
$(MAKE) distclean
$(MAKE) all
# currently no tools required, hence no tools/ dir or work to do
tools:
@true
build:
(cd userland && $(MAKE) build)
(cd man && $(MAKE) install-staging)
(cd testscripts && $(MAKE) build)
includes tags depend:
(cd kern && $(MAKE) $@)
(cd userland && $(MAKE) $@)
clean:
(cd kern && $(MAKE) $@)
(cd userland && $(MAKE) $@)
rm -rf $(INSTALLTOP)
distclean: clean
rm -rf $(WORKDIR)
install: $(OSTREE)
(cd $(INSTALLTOP) && tar -cf - .) | (cd $(OSTREE) && tar -xvf -)
.PHONY: all rebuild fullrebuild tools build includes tags depend
.PHONY: clean distclean
# old BSD name, same as distclean
cleandir: distclean
.PHONY: cleandir
第(24)行是:
.include "$(TOP)/mk/os161.config.mk"
如有任何帮助,我们将不胜感激。我检查了类似的 makefile 错误,但我似乎找不到问题所在。
分隔符是 <TAB>
。请不要在 Makefile 的行首使用空格,Makefile.in ...
片段:
21 #
22
23
24 TOP=.
25
26 all:; # make this first
27
28 MKDIRS=$(OSTREE)
29
30 <TAB>include "$(TOP)/mk/os161.mkdirs.mk"
31
32 all: tools .WAIT includes .WAIT build
33
34 rebuild:
35 <TAB>$(MAKE) clean
36 <TAB>$(MAKE) all
37
38 <TAB>fullrebuild:
39 <TAB>$(MAKE) distclean
40 <TAB>$(MAKE) all
仔细阅读documentation of GNU make, notably about the include directive.
你的
.include "$(TOP)/mk/os161.config.mk"
(错误地)请求包含一个路径以双引号开头的文件(您可能没有任何文件,因此 include
失败...)
你想要
-include $(TOP)/mk/os161.config.mk
并且该行以减号或破折号开头,而不是点。
务必使用保持 tab 字符完整的编辑器。
顺便说一句,FreeBSD make 接受带有起始点的 .include
指令,并且需要双引号中的路径。
我正在尝试为 os161 构建用户区。当我在命令行中键入 make 时,出现以下错误:
Makefile 24: ***missing separator (did you mean TAB instead of 8 spaces?). Stop.
我检查了第 24 行的 Makefile 并尝试在该行的开头添加一个 TAB,但这没有用,因为我随后收到另一个错误:
Makefile 24: ***recipe commences before first target. Stop.
完整的 makefile 供参考:
#
# Toplevel makefile for OS/161.
#
#
# Main rules:
# all (default): depend and compile system; install into staging area
# rebuild: likewise, but start with a clean slate.
# fullrebuild: likewise, but start with a very clean slate.
#
# What all does, in order:
# tools: depend and compile the tools used in build.
# includes: install header files.
# build: depend and compile the system.
#
# Other targets:
# depend: just update make dependency information.
# tags: generate/regenerate "tags" files.
# install: install into $(OSTREE).
# clean: remove generated files.
# distclean: remove all generated files.
#
TOP=.
.include "$(TOP)/mk/os161.config.mk"
all:; # make this first
MKDIRS=$(OSTREE)
.include "$(TOP)/mk/os161.mkdirs.mk"
all: tools .WAIT includes .WAIT build
rebuild:
$(MAKE) clean
$(MAKE) all
fullrebuild:
$(MAKE) distclean
$(MAKE) all
# currently no tools required, hence no tools/ dir or work to do
tools:
@true
build:
(cd userland && $(MAKE) build)
(cd man && $(MAKE) install-staging)
(cd testscripts && $(MAKE) build)
includes tags depend:
(cd kern && $(MAKE) $@)
(cd userland && $(MAKE) $@)
clean:
(cd kern && $(MAKE) $@)
(cd userland && $(MAKE) $@)
rm -rf $(INSTALLTOP)
distclean: clean
rm -rf $(WORKDIR)
install: $(OSTREE)
(cd $(INSTALLTOP) && tar -cf - .) | (cd $(OSTREE) && tar -xvf -)
.PHONY: all rebuild fullrebuild tools build includes tags depend
.PHONY: clean distclean
# old BSD name, same as distclean
cleandir: distclean
.PHONY: cleandir
第(24)行是:
.include "$(TOP)/mk/os161.config.mk"
如有任何帮助,我们将不胜感激。我检查了类似的 makefile 错误,但我似乎找不到问题所在。
分隔符是 <TAB>
。请不要在 Makefile 的行首使用空格,Makefile.in ...
片段:
21 #
22
23
24 TOP=.
25
26 all:; # make this first
27
28 MKDIRS=$(OSTREE)
29
30 <TAB>include "$(TOP)/mk/os161.mkdirs.mk"
31
32 all: tools .WAIT includes .WAIT build
33
34 rebuild:
35 <TAB>$(MAKE) clean
36 <TAB>$(MAKE) all
37
38 <TAB>fullrebuild:
39 <TAB>$(MAKE) distclean
40 <TAB>$(MAKE) all
仔细阅读documentation of GNU make, notably about the include directive.
你的
.include "$(TOP)/mk/os161.config.mk"
(错误地)请求包含一个路径以双引号开头的文件(您可能没有任何文件,因此 include
失败...)
你想要
-include $(TOP)/mk/os161.config.mk
并且该行以减号或破折号开头,而不是点。
务必使用保持 tab 字符完整的编辑器。
顺便说一句,FreeBSD make 接受带有起始点的 .include
指令,并且需要双引号中的路径。