Ich habe ein Makefile, das ich verwende, um eine einzelne Datei zu kompilieren. Wenn ich ein Argument übergeben muss, verwende ich target = targetFile.Verwenden von Makefile-Argumenten ohne foo =
Das Skript übernimmt das Argument, sucht nach der Datei (innerhalb desselben Verzeichnisses), die den gleichen Wert wie das Argument hat, und kompiliert sie.
Ich verwende dies für die Kompilierung von Problemen von UHUNT und UVA, die eine einzelne C++ Datei verwenden. Also brauche ich nicht mehrere Makefiles für mehrere Quelldateien. Ein einzelnes Makefile für mehrere Quelldateien ist der Grund, warum ich das Makefile gemacht habe.
Hier ist der Code, den ich
OBJS = $(target).o
CC = g++
CFLAGS = -Wall -g -std=c++11
INCLUDE = -I./$(target)
#default command to run
all : Main-$(target) clean run
#compile and build
Main-$(target) : $(OBJS)
$(CC) $(CFLAGS) $^ -o [email protected]
%.o : %.cpp
$(CC) -c $(CFLAGS) $<
#remove object and any other garbage files.
clean:
rm -rf -d $(target).o *~ *% *# .#*
#remove the compiled file
clean-all:
$(clean) rm Main-$(target)
#run the compiled file
run:
./Main-$(target)
Der Befehl, den ich zu kompilieren so weit haben, ist zu bedienen, make target=sourceFile
Auch habe ich nicht die Dateierweiterung, ich meine Quelle alle Dateierweiterungen werden CPP
Was will ich am Ende ist: make sourceFile
J ust eine Randnotiz, für die Verwendung des Befehls sauber und clean-all, ich benutze
make target=sourceFile clean
make target=sourceFile clean-all
Ich würde es vorziehen, wenn ich verwenden kann:
make sourceFile clean
make sourceFile clean-all
Verschieben Sie möglicherweise die allgemeinen Teile in eine Vorlage, die Sie einschließen können, und haben Sie ein schmales Hauptmakefile, das nur die spezifischen Ziele bereitstellt, die Sie möchten. –