Ich habe ein Verzeichnis mit dem Namen project
.Problem mit Makefile im obersten Verzeichnis, Quellen in Unterverzeichnissen
Es enthält zwei Unterverzeichnisse mit den Namen client
und server
und ein Makefile namens Makefile
.
client
und server
haben Quelldateien genannt client.c
bzw. server.c
.
Ich habe keine separaten Makefiles in den Unterverzeichnissen für Quellen, die zu diesem Verzeichnis gehören. Alle Builds werden vom einzelnen Makefile erledigt. Der Makefile
Code ist
FLAGS = -W -Wall -g -pthread
SERV =./server/server.c #My server code
CLI =./client/client.c #My client code
build:svr cnt
svr: $(SERV)
cc $(FLAGS) $(SERV) -o ./server/server.out
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o ./client/client.out
Ich lief nun make cnt
und es
cc -W -Wall -g -pthread ./client/client.c -o ./client/client.out
Das Problem ist, alle nachfolgenden make cnt
Befehle erneut kompilieren zu beenden und den obigen Text ausgibt, obwohl ich nicht bin zu ändern ./client/client.c
Ich stecke hier fest. Ich weiß nicht, was ich machen soll.
Was ich tun möchte, ist:
- Mit
make cnt
, kompilierenclient/client.c
und Ausgang seine ausführbare Datei in dem Verzeichnisclient/
- Mit
make svr
, kompilierenserver/server.c
und Ausgang seine ausführbare Datei inserver/
Verzeichnis. - Und mit
make, compile both
Server/server.cand
Client/client.c` und geben ihre ausführbaren Dateien in den entsprechenden Verzeichnissen
Da ich aber keine ausführbaren Dateien svr
und `cnt das Problem, das ich bin nicht über genannt Haben ist nicht gelöst.
Wenn ich das Ziel ./client/client.out
statt cnt
ändern und rufen Sie dann make client/client.out
dann wäre es in Ordnung sein, genau das, was ich brauche, aber ich will nicht lange Befehl make client/client.out
in meinem Terminal
Die Abhilfe muss ich eingeben erhalten ist wie folgt
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o cnt
cp cnt ./client/client.out
Aber nicht ganz zufrieden damit. Ich bin sicher, was ich tun möchte, ist wirklich einfach und es sollte ein bequemer Weg sein, es zu tun. Wie kann ich das tun?
Danke für die Erklärung. – nagre