2017-05-20 16 views
0

Ich versuche, das Benutzerland für os161 zu bauen. Wenn ich schreibe in der Befehlszeile mache ich die folgende Fehlermeldung erhalten:Makefile Fehler - "*** fehlende Trennzeichen" & "*** Rezept beginnt vor dem ersten Ziel"

Makefile 24: ***missing separator (did you mean TAB instead of 8 spaces?). Stop.

ich das Makefile überprüfte in Zeile 24 und versuchte, eine TAB zu Beginn der Zeile hinzufügen, aber das hat nicht funktioniert, wie ich dann bekommen ein anderer Fehler:

Makefile 24: ***recipe commences before first target. Stop.

Hier ist die vollständige Make-Datei als Referenz:

# 
# 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) [email protected]) 
    (cd userland && $(MAKE) [email protected]) 

clean: 
    (cd kern && $(MAKE) [email protected]) 
    (cd userland && $(MAKE) [email protected]) 
    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 

die Linie ist Frage (24) ist:

.include "$(TOP)/mk/os161.config.mk" 

Jede Hilfe wäre willkommen. Ich habe ähnliche Makefile-Fehler ausgecheckt, aber ich kann nicht finden, was falsch ist.

+0

Diese Zeile sollte nach der 'all:' Zeile mindestens –

+0

immer noch den fehlenden Separator Fehler haben. Versucht, alles zu setzen :; vor Zeile 24. –

+0

Ich habe dieses Problem behoben, es hatte nichts wirklich mit der Makefile-Syntax zu tun. Meine Standardmarke war GNU make und ich musste stattdessen BSD make verwenden. –

Antwort

0

Lesen Sie sorgfältig documentation of GNU make, insbesondere über die include directive.

Ihre

.include "$(TOP)/mk/os161.config.mk" 

ist (zu Unrecht) Anfordern der Aufnahme einer Datei, deren Pfad beginnt mit einem doppelten Anführungszeichen (und Sie haben wahrscheinlich nicht vorhanden, so dass die include versagt ...)

Sie wollen

-include $(TOP)/mk/os161.config.mk 

und dass Zeile beginnt mit einem Minuszeichen oder Bindestrich, kein Punkt.

Stellen Sie sicher, dass Sie einen Editor verwenden, der Tab Zeichen intakt hält. Die akzeptiert .include Direktiven mit Startpunkt und möchte einen Pfad in Anführungszeichen.

+0

zu ermöglichen. Ich brauchte tatsächlich BSD in diesem Fall mit der OS161-Dokumentation, aber ich benutzte GNU make. Ich denke, dass die Syntax für GNU make falsch ist, aber nicht für BSD macht es einfacher, den Fehler zu finden! Vielen Dank :) –

0

Ein Separator ist ein <TAB>. Bitte verwenden Sie keine Leerzeichen in Zeile beginnen in einem Makefile, Makefile.in ...

Snippet:

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 
Verwandte Themen