Makefile "no rule to make target"

Life Sucks

Cadet 2nd Year
Dabei seit
Juli 2018
Beiträge
26
Makefile.PNG



****************************************************************
Immer wenn ich make all mache kommt die Meldung:
****************************************************************
die %.obj existiert aber warum kann er dies nicht finden??
20181228_171507[1].jpg
Makefile.PNG20181228_171507[1].jpg
 

rg88

Fleet Admiral
Dabei seit
Feb. 2015
Beiträge
32.610
mach mal einen kompletten Auszug von dem Ordner. aus deinem Screenshot geht nicht hervor, ob es die main.obj nun gibt oder nicht
 
  • Gefällt mir
Reaktionen: Life Sucks

blöderidiot

Captain
Dabei seit
Juni 2004
Beiträge
3.822
Welche Quelltext-Dateien gibt es denn überhaupt? Ich rate mal:
  • main.cpp
  • sort.cpp sort.h
Wenn das so ist, dann gibt es kein main.h und das Makefile scheitert. So müßte es gehen:

Makefile:
CXX      = cl
CXXFLAGS = /EHsc /nologo
LD       = link
LDFLAGS  = /nologo
TARGET   = main.exe

HEADERS  = sort.h
OBJS     = main.obj sort.obj

all: $(TARGET)
.PHONY: all

clean:
    del $(OBJS)

distclean:
    del $(TARGET) $(OBJS)
.PHONY:    clean distclean

%.obj:    %.cpp $(HEADERS)
    $(CXX) $(CXXFLAGS) /c $<

$(TARGET): $(OBJS)
    $(LD) $(LDFLAGS) $^ /OUT:$@
Der Unterschied ist vor allem in: %.obj: %.cpp $(HEADERS), aber ich habe noch ein paar andere Fehler rausgeholt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Life Sucks

Life Sucks

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Juli 2018
Beiträge
26
Ich hab mittlerweile mein Problem lösen können, indem ich einfach folgende Veränderungen gemacht habe:

LD = linker war falsch.
Es müsste LD = link.

Dann hab ich noch eine extra Regel hinzugefügt:
main.obj: %.cpp
$(CXX) $(CXXFLAGS) /c $<

Danke für eure Hilfe.
 
  • Gefällt mir
Reaktionen: rg88

blöderidiot

Captain
Dabei seit
Juni 2004
Beiträge
3.822
Zitat von Life Sucks:
OK, Du hast es "gelöst", aber die obere Zeile ist doppelt gemoppelt, da Du eh schon explizit für main.obj eine "Build-Regel" anführst -- und eigentlich auch schon weisst, dass main.obj nur von main.cpp kommen kann. %.cpp ist also "verwirrend". Da Du wahrscheinlich auch die Funktionen aus sort.cpp irgendwie in main.cpp verwenden willst, würde diese Abhängigkeitsregel in der Build-Regel für main.obj (zu sort.h) dort fehlen.
 
  • Gefällt mir
Reaktionen: rg88
Top