Hilfe bei Makefile



  • Das folgende Mafefile habe ich auch dem Forum hier. Es kompiliert wunderbar außer: Ich habe zusätzlich zu meinen cpp dateien noch .c dateien in meinem Projekt welche ich gerne dazukompileren würde. In der Form geht das aber nicht - leider kenne ich mich nicht genug aus wie ich das folgende makefile anpassen muss damit auch c - dateien dazugenommen werden. Kann mir jemand helfen?

    TARGET   := ./out
    CXXFLAGS := -O3
    CXX      := g++
    LIBS     := 
    EXT      := cpp
    BUILDDIR := build
    
    override BUILDDIR := $(strip $(BUILDDIR))
    SOURCES  := $(wildcard *.$(EXT))
    OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
    DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
    
    .PHONY: all
    all: $(TARGET)
    
    $(TARGET): $(OBJECTS) $(DEPS)
            $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
    
    ifneq ($(MAKECMDGOALS), clean)
    -include $(DEPS)
    endif
    
    $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.c=.o) -o $@
    
    %.tag:
            mkdir -p $(dir $(@))
            touch $@
    
    .PHONY: clean
    clean:
            rm -rf $(BUILDDIR)
    


  • EXT      := cpp 
    zu
    EXT      := c*
    

    Sollte funktionieren. (keine Garantie dafür, hab es nicht ausprobiert)

    Denk dabei auch an die Unterschiede zwischen C und C++
    wie z.B. "name mangling" und benutzt gegebenfalls "extern"



  • *** missing separator.  Schluss.
    

    kommt beim ändern zu c*



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • make file file maker



  • Ändere

    EXT      := cpp
    # ...
    
    SOURCES  := $(wildcard *.$(EXT))
    OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
    DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
    

    in

    CXXEXT := cpp
    CEXT := c
    #...
    
    CXXSOURCES  := $(wildcard *.$(CXXEXT))
    CXXOBJECTS  := $(patsubst %.$(CXXEXT), $(BUILDDIR)/%.o, $(CXXSOURCES))
    CXXDEPS     := $(patsubst %.$(CXXEXT), $(BUILDDIR)/%.dep, $(CXXSOURCES))
    
    CSOURCES  := $(wildcard *.$(CEXT))
    COBJECTS  := $(patsubst %.$(CEXT), $(BUILDDIR)/%.o, $(CSOURCES))
    CDEPS     := $(patsubst %.$(CEXT), $(BUILDDIR)/%.dep, $(CSOURCES))
    
    SOURCES := $(CSOURCES) $(CXXSOURCES)
    OBJECTS := $(COBJECTS) $(CXXOBJECTS)
    DEPS := $(CDEPS) $(CXXDEPS)
    

    und

    $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.c=.o) -o $@
    

    in

    $(CXXOBJECTS): $(BUILDDIR)/%.o: %.$(CXXEXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(CXXDEPS): $(BUILDDIR)/%.dep: %.$(CXXEXT) $(BUILDDIR)/.tag
            $(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(CXXEXT)=.o) -o $@
    
    $(COBJECTS): $(BUILDDIR)/%.o: %.$(CEXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
            $(CC) $(CFLAGS) -c $< -o $@
    
    $(CDEPS): $(BUILDDIR)/%.dep: %.$(CEXT) $(BUILDDIR)/.tag
            $(CC) $(CFLAGS) -MM $< -MT $@ -MT $(<:.$(CEXT)=.o) -o $@
    

    hab es aber nicht getestet. So ungefähr halt.

    <edit>benutz bitte bessere Topics 😡 </edit>



  • Wie kann ich in das Makefile derart ändern, daß ich Shared Librarys inkludieren kann ? Ich hatte es Greenhorn-mässig erstmal mit untigem Eintrag probiert ?

    LIBS := boost_filesystem-gcc42-1_34_1



  • Winn logged off schrieb:

    Wie kann ich in das Makefile derart ändern, daß ich Shared Librarys inkludieren kann ? Ich hatte es Greenhorn-mässig erstmal mit untigem Eintrag probiert ?

    LIBS := boost_filesystem-gcc42-1_34_1

    Okay, also die Einbindung von INCLUDE's und LIBRARY's habe ich nun hinbekommen, wie aber kann man ein MakeFile modifizieren, damit aus dem Build-Verzeichnis auch die darunter liegenden Verzeichnisse aka *.cpp abgesucht und in dem Build-Prozess eingebunden werden ?



  • Winn logged off schrieb:

    Wie kann ich in das Makefile derart ändern, daß ich Shared Librarys inkludieren kann ? Ich hatte es Greenhorn-mässig erstmal mit untigem Eintrag probiert ?

    LIBS := boost_filesystem-gcc42-1_34_1

    Du musst die Parameter da natürlich so eintragen, wie der GCC (bzw. der verwendete Compiler sie versteht). Für Libraries benutzt man das -l-Flag. Siehe man: gcc

    Winn schrieb:

    Winn logged off schrieb:

    Wie kann ich in das Makefile derart ändern, daß ich Shared Librarys inkludieren kann ? Ich hatte es Greenhorn-mässig erstmal mit untigem Eintrag probiert ?

    LIBS := boost_filesystem-gcc42-1_34_1

    Okay, also die Einbindung von INCLUDE's und LIBRARY's habe ich nun hinbekommen, wie aber kann man ein MakeFile modifizieren, damit aus dem Build-Verzeichnis auch die darunter liegenden Verzeichnisse aka *.cpp abgesucht und in dem Build-Prozess eingebunden werden ?

    Die Zeile anpassen SOURCES := $(wildcard *.$(EXT))

    Siehe auch http://www.gnu.org/software/make/manual/make.html



  • EDIT::Hab mir nun mit einem Shell-Skript geholfen, benötige also keine Hilfe mehr... Makefiles sind mir dafür zu aufwendig - Danke trotzdem !

    rüdiger schrieb:

    Die Zeile anpassen SOURCES := $(wildcard *.$(EXT))
    Siehe auch http://www.gnu.org/software/make/manual/make.html

    Das habe ich probiert, inzwischen sieht meint MakeFile so aus - quittiert wird seine Ausführung mit "make: *** No rule to make target `caeBox.cpp', needed by `build/caeBox.o'. Stop." Wobei die Datei "caeBox.cpp" im "./subfolder/" liegt. Der von Dir angegebene Link führt zur kompletten Funktionsweise von Make - ich brauche nur eine kleine Untermenge davon und leider sitzt mir auch die Zeit ein wenig im Nacken...

    TARGET   := ./ReadCAE
    LIBS     := -Xlinker $(LD_LIBRARY_PATH)/libboost_filesystem-gcc42-1_34_1.so
    INCLUDE  := -I$(INCLUDE_PATH)
    CXXFLAGS := -O2 -g -v $(LIBS) $(INCLUDE)
    CXX      := g++
    EXT      := cpp
    BUILDDIR := build
    Data     := ./subfolder/
    
    override BUILDDIR := $(strip $(BUILDDIR))
    ROOT_SOURCES  := $(wildcard *.$(EXT))
    ROOT_OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(ROOT_SOURCES))
    ROOT_DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(ROOT_SOURCES))
    
    DATA_SOURCES  := $(wildcard $(Data)*.$(EXT))
    DATA_OBJECTS  := $(patsubst $(Data)%.$(EXT), $(BUILDDIR)/%.o, $(DATA_SOURCES))
    DATA_DEPS     := $(patsubst $(Data)%.$(EXT), $(BUILDDIR)/%.dep, $(DATA_SOURCES))
    
    SOURCES := $(ROOT_SOURCES) $(DATA_SOURCES) 
    OBJECTS := $(ROOT_OBJECTS) $(DATA_OBJECTS) 
    DEPS := $(ROOT_DEPS) $(DATA_DEPS) 
    
    .PHONY: all
    all: $(TARGET)
    
    $(TARGET): $(OBJECTS) $(DEPS)
    	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS)
    
    ifneq ($(MAKECMDGOALS), clean)
    -include $(ROOT_DEPS)
    endif
    
    $(ROOT_OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(ROOT_DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.c=.o) -o $@
    
    $(DATA_OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(DATA_DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.c=.o) -o $@
    
    %.tag:
    	mkdir -p $(dir $(@))
    	touch $@
    
    .PHONY: clean
    clean:
    	rm -rf $(BUILDDIR)
    

Anmelden zum Antworten