Makefile "no rule to make target"

Life Sucks

Cadet 2nd Year
Dabei seit
Juli 2018
Beiträge
23
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
26.278
mach mal einen kompletten Auszug von dem Ordner. aus deinem Screenshot geht nicht hervor, ob es die main.obj nun gibt oder nicht
 

blöderidiot

Captain
Dabei seit
Juni 2004
Beiträge
3.369
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:

Life Sucks

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Juli 2018
Beiträge
23
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.
 

blöderidiot

Captain
Dabei seit
Juni 2004
Beiträge
3.369
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.
 
Top