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.htmlDas 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)