Hallöchen, ich bräuchte etwas Hilfe mit einem Makefile. Für mein (Mini-)Programm habe ich eins geschrieben, entwickelt wurde allerdings unter Linux, entsprechend sieht das Makefile folgendermaßen aus:
Damit kann ich mein Programm wunderbar unter Linux mit Make bauen. Leider funktioniert das unter FreeBSD nicht, ich bekomme folgenden Fehler:
make clean
make
Nun bin ich leider weder unter Linux noch unter FreeBSD ein Makefile-Experte (tatsächlich hab ich meins auch nur irgendwo her kopiert und freu mich dass es funktioniert). Kann mir daher jemand unter die Arme greifen?
Wie ist denn das übliche Vorgehen, wenn ich Software auf unterschiedlichen Systemen bereitstellen will? Schreibe ich ein (GNU)-Makefile, und verlasse mich drauf, dass die anderen Plattformen selbiges entsprechend nutzen können (unter FreeBSD müsste ich dann gmake statt make verwenden?), oder sollte ich für andere Plattformen (in diesem Fall nur FreeBSD) ein separates Makefile anbieten?
Code:
#--------------------------------------------------------------------------
# variables
#--------------------------------------------------------------------------
OBJDIR = obj
APPL = $(OBJDIR)/main.o $(OBJDIR)/http.o
DISTBIN = unitydownloader
LFLAGS = -lcurl
CFLAGS = -I ./ -c -ggdb -Wreturn-type -Wformat -pedantic -Wunused-variable -Wunused-label -Wunused-value -Wno-long-long
#--------------------------------------------------------------------------
# more variables
#--------------------------------------------------------------------------
CC = g++
doCompile = $(CC) $(CFLAGS)
doLink = $(CC) $(LFLAGS)
doClean = rm -f *.o *~ *.a
#--------------------------------------------------------------------------
# targets
#--------------------------------------------------------------------------
all:
@(echo -; echo Making $(DISTBIN) ...; make $(DISTBIN))
$(DISTBIN): $(APPL)
@echo Linking "$*" ...
$(doLink) $(APPL) -o $@
clean:
@(echo Cleanup of $(DISTBIN) ... )
$(doClean)
(cd $(OBJDIR) && $(doClean))
#--------------------------------------------------------------------------
# compile
#--------------------------------------------------------------------------
$(OBJDIR)/%.o: %.cc
@echo Compile "$(*F)" ...
$(doCompile) $(*F).cc -o $@
#--------------------------------------------------------------------------
# source files
#--------------------------------------------------------------------------
$(OBJDIR)/main.o : main.cc
$(OBJDIR)/http.o : http.cc
Damit kann ich mein Programm wunderbar unter Linux mit Make bauen. Leider funktioniert das unter FreeBSD nicht, ich bekomme folgenden Fehler:
make clean
Code:
07:50:06 s710@epoch:~/um> make clean
Cleanup of unitydownloader ...
rm -f *.o *~ *.a
(cd obj && rm -f *.o *~ *.a)
cd: obj: No such file or directory
*** [clean] Error code 2
Stop in /usr/home/s710/um.
make
Code:
07:50:10 s710@epoch:~/um> make
-
Making unitydownloader ...
make: don't know how to make unitydownloader. Stop
*** [all] Error code 2
Stop in /usr/home/s710/um.
Nun bin ich leider weder unter Linux noch unter FreeBSD ein Makefile-Experte (tatsächlich hab ich meins auch nur irgendwo her kopiert und freu mich dass es funktioniert). Kann mir daher jemand unter die Arme greifen?
Wie ist denn das übliche Vorgehen, wenn ich Software auf unterschiedlichen Systemen bereitstellen will? Schreibe ich ein (GNU)-Makefile, und verlasse mich drauf, dass die anderen Plattformen selbiges entsprechend nutzen können (unter FreeBSD müsste ich dann gmake statt make verwenden?), oder sollte ich für andere Plattformen (in diesem Fall nur FreeBSD) ein separates Makefile anbieten?