6 Stimmen

Eine Datei mit einem Makefile zur Laufzeit kopieren

Früher habe ich meine Programme mit Batch-Skripts unter Windows kompiliert, aber kürzlich habe ich Makefiles entdeckt, die viel effizienter sind.

In meiner .bat Datei hatte ich diese Zeile, die zur Laufzeit einige DLLs in das aktuelle Verzeichnis kopierte, und es hat perfekt funktioniert.

copy C:\lib\glfw\glfw.dll 

Ich habe dieselbe Zeile in meinem Makefile versucht und auch die Alternative cp ausprobiert, aber mein Terminal gibt diesen Fehler aus, obwohl die Datei am angegebenen Speicherort vorhanden ist

process_begin: CreateProcess(NULL, copy C:\lib\glfw\glfw.dll, ...) failed
make (e=2): Das System kann die angegebene Datei nicht finden.
make: *** [core.exe] Fehler 2

Hier ist das vollständige Makefile, das ich verwende. Beachten Sie, dass es ohne die Kopierzeile einwandfrei funktioniert.. was mache ich falsch oder ist das möglich?

EXEC = core.exe
OBJS = src/obp.o

CC = g++

CFLAGS  = -W -Wall
LIBS    = -lSOIL -lglew32 -lglfw -lopengl32
LDFLAGS =

$(EXEC): $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
    copy C:\lib\glfw\glfw.dll

clean:
    rm -f $(EXEC) $(OBJS) *~

5voto

Reinier Torenbeek Punkte 15439

Es sieht so aus, als ob du dies aus einer MSYS (oder MinGW) Umgebung ausführst, die nicht über copy Bescheid weiß. Stattdessen kannst du verwenden

cp C:\lib\glfw\glfw.dll .

Wenn du das *nix-ähnliche cp vermeiden möchtest, könntest du xcopy wie folgt verwenden:

xcopy //Y C:\lib\glfw\glfw.dll

Beachte das doppelte //, das erforderlich ist, um den / zu escapen.

Oder du könntest dies in einer normalen MS-DOS Umgebung ausführen, in diesem Fall wird dein clean Ziel nicht funktionieren, weil rm nicht gefunden wird und du del verwenden solltest.

Mit deiner aktuellen Konfiguration wird keine integrierte DOS Befehl gefunden. Siehe Wahl des Shells, um zu lesen, wie make bestimmt, welcher Shell verwendet wird.

0voto

Greg Hewgill Punkte 882617

Sie müssen möglicherweise die Rückwärtsschrägstriche verdoppeln, damit make versteht, was Sie wollen:

copy c:\\lib\\glfw\\glfw.dll

Make stammt aus einer Unix-Umgebung, in der der Dateitärenzeichen / ist, daher ist es manchmal etwas umständlich, es in einer Windows-Umgebung zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X