Makefile will nicht



  • Moin, habe gerade ein Problem mit dem Makefile, es will irgendwie nicht.

    Bekomme immer die Meldung das er nicht weiss wie er die cpp-Datei bauen soll.
    Hocke da jetzt seit letzter Woche dran, sehe aber irgendwie meinen Fehler nicht.

    LINK	= ild
    BUILDDIR	= ./build/
    INCLUDES	= 
    CC	= /opt/sunstudio/SUNWspro/bin/CC
    
    SOURCES = CreateSQL.cpp\
     Document.cpp
    
    OBJECTS = $(SOURCES:.cpp=.o)
    
    CPPFLAGS = -g -KPIC -mt -features=rtti -D_REENTRANT -DSAX_PARSER -library=iostream   -features=namespace
    
    all:$(OBJECTS)
    	$(LINK) -o program $(OBJECTS)
    
    clean:	rm -rf $(OBJECTS)
    
    OBJECTS:SOURCES
    	$(LINK) -o $% $< $(LDLIBS)
    
    SOURCES:
    	$(CC) $(CPPFLAGS) $<
    
    %.o:	%.cpp
    	$(CC) $(CPPFLAGS) $<
    
    #%:		%.cpp
    #		$(LINK) -o $% $< $(LDLIBS)
    

    Bin auch nicht all zu fit was Makefiles angeht, kann mir evtl. jemand hier weiterhelfen?



  • Schau dir vielleicht die ultimative Makefile an.



  • rüdiger schrieb:

    Schau dir vielleicht die ultimative Makefile an.

    Hatte ich schon dran gedacht, aber funktioniert die auch mit dem Make auf Solaris8?
    Ist ja kein GNU Make zwangsläufig.
    Aber ein Versuch wäre es wert.

    Trotzdem muss das doch gehen. Bis zur .cpp datei scheint er ja schon mal zu kommen.



  • Solarisguy schrieb:

    rüdiger schrieb:

    Schau dir vielleicht die ultimative Makefile an.

    Hatte ich schon dran gedacht, aber funktioniert die auch mit dem Make auf Solaris8?

    wie wäre es, wenn du es selber ausprobierst und deine Erfahrungswerte mitteilst?



  • supertux schrieb:

    Solarisguy schrieb:

    rüdiger schrieb:

    Schau dir vielleicht die ultimative Makefile an.

    Hatte ich schon dran gedacht, aber funktioniert die auch mit dem Make auf Solaris8?

    wie wäre es, wenn du es selber ausprobierst und deine Erfahrungswerte mitteilst?

    Werde ich, sobald ich Zeit dafür habe, tun.
    Hätte ja sein können, das im obigen Makefile jemand einen Fehler entdeckt.

    Irgendwie habe ich solangsam das Gefühl das bei Makefiles jeder von jedem kopieren tut. 😉



  • Hallo,
    So etwas habe ich in meinen makefiles stehen:
    Hinweis: nach %.o ist ein TAB
    Die Kommandozeilen beginnen auch mit TAB

    %.o	:   %.cpp
    	    @echo "compile "$*.cpp" ..."
    	    @$(GPP) $(CFLAGS) -c $*.cpp
    
    %.o	:   %.c
    	    @echo "compile "$*.c" ..."
    	    @$(GCC) $(CFLAGS) -c $*.c
    

    Vieleicht hilft es dir

    Gruß Frank



  • So, hab jetzt erstmal mit dem einfachen Makefile aufgegeben, weil das klappt einfach nicht.

    Bin jetzt zu einer etwas ausgerollteren Version gewechselt, für jede Datei gibts ne extra Regel.
    Ging erst ganz gut, aber jetzt wills irgendwie nicht mehr...
    ... bis ich den Code hierein gepastet habe:

    SOURCES = CreateSQL.cpp Ÿ\
     Document.cppŸ
    

    Diese beiden Sonderzeichen (was ist das btw?!?!?) werden natürlich unter Solaris in nedit nicht angezeigt...

    Ka, wie die dahin kommen, hatte schon was ähnliches vorher mal. grml.



  • So, nachdem ich die Sache gestern schon zum laufen bekommen habe, konnte ich heute sogar eine generalisierte Version zusammen hacken:

    SOURCES = CreateSQL.cpp \
     Data.cpp \
     Document.cpp \
     Helper.cpp \
     ReadParaValueTable.cpp \
     SearchNode.cpp \
     pvtanalyzer.cpp
    
    OBJECTS = $(SOURCES:.cpp=.o)
    
    CPPFLAGS = -g -KPIC -mt -features=rtti -D_REENTRANT -DSAX_PARSER -library=iostream   -features=namespace  -I$(XERCES_HOME)/include -c
    
    all:$(OBJECTS)
    	$(CC) $(PROGARGS) $(INCLUDE) -o program $(OBJECTS) $(LIBS)
    
    clean:
    	rm -rf $(OBJECTS)
    
    $(OBJECTS):
    	$(CC) $(CPPFLAGS) $(@:.o=.cpp) -L$(XERCES_HOME)/lib
    
    #$(SOURCES):
    #	$(CC) $(CPPFLAGS) $@ -L$(XERCES_HOME)/lib
    

    Eine Regel für SOURCE habe ich aber egal wie nicht hinbekommen.
    Deshalb der $(@:.o=.cpp) Hack, welcher aus einer *.o Datei wieder eine *.cpp Datei macht.
    Ich weiss jetzt nicht, ob das ein Fehler in der Makefile noch verhindert hat, oder Solaris8 hier zu blöd ist. Der Versuch bei all direkt auf SOURCES zu gehen statt OBJECTS schlägt auch fehl.
    Naja, jetzt funktionierts, und für solaris8 hab ich endlich eine etwas einfacheres Makefile... 🙄


Anmelden zum Antworten