Makefiles unter windows mit g++, Verknüpfung Bibliothek
Habe ich mittlerweile satt mit MSVC++6, und wie jeder ist immer, mir zu sagen, dass es eine beschissene compiler und so.
So, jetzt habe ich beschlossen, zu versuchen, vim plus g++ und makefiles. Hier ist mein problem; ich habe Folgendes makefile:
# This is supposed to be a comment..
CC = g++
# The line above sets the compiler in use..
# The next line sets the compilation flags
CFLAGS=-c -Wall
all: main.exe
main.exe: main.o Accel.o
$(CC) -o main.exe main.o Accel.o
main.o: main.cpp Accel.h
$(CC) $(CFLAGS) main.cpp
Accel.o: Accel.cpp Accel.h
$(CC) $(CFLAGS) Accel.cpp
clean:
del main.exe *.o
Dieser gibt eine Fehlermeldung, wenn Sie versuchen zu make
, weil ich brauche, um einen link zu einer windows-Bibliothek namens Ws2_32.lib
, welche Winsock2.h
, die ich include
in einem meiner .h
- Dateien.
So, wie mache ich das? Ich habe versucht, die -l
option, aber ich kann nicht damit es funktioniert. Wie funktioniert es mit einem Pfad, der Leerzeichen enthält?
- Sind Sie gezwungen, die Arbeit mit einem compiler, die mehr als 5 Jahre alt?
- Übrigens, schreib-Abhängigkeiten in makefiles explizit ist Recht umständlich. Sie sollten überprüfen, g++'- s-M Schalter.
- Okay.. Danke.. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Schritt: suchen Sie die Bibliothek, die Sie suchen. Für mich ist es in :
Zweiten Schritt, pass, directory-mit -L :
Dritten Schritt übergeben Sie den Namen der Bibliothek mit -l (kleines L):
Dann verwenden Sie es:
LINKFLAGS=-L "C:\Program Files\Microsoft Visual Studio\VC98\Lib" -l Ws2_32
Dies ist nicht die Antwort auf deine Frage, aber ich schlage cmake . Es ist ein multi-Plattform-multi-build environement Projekt-Datei-generator. Die syntax von CMake-Dateien ist ganz einfach (zumindest einfacher als Makefile) und Generiere Makefile oder Visual Studio-Projekte auf Anfrage.
Problem mit der hand-codiert Makefile ist, dass sehr bald, Ihre Abhängigkeit von den Baum-so groß, dass die Aufrechterhaltung der alle die Regeln, was muss das bauen, was wird eine sehr langwierige operation. Daher gibt es Tonnen von Makefile-Generatoren (autotools, CMake) oder Makefile alternativen (Scons, waf, bjam, ....)
Verwenden
-L
um ein Verzeichnis anzugeben, wo gcc sollte die Suche nach Bibliotheken. Verwenden-l
(lower-case-ell), um anzugeben, eine Bibliothek zu werden, die durch Links von der-L
Pfade (und einige Standardwerte).Flucht Pfade mit Leerzeichen, umgekehrte Schrägstriche verwenden, die einfache oder doppelte Anführungszeichen als Ihre shell benötigt. Finden Sie die GNU make Dokumentation, die GNU bash-Dokumentation. In diesem Artikel finden Sie info über Räume in anderen teilen von GNU makefiles.
Sollten Sie die Verknüpfung mit der Bibliothek mit dem compiler. Im Falle von cygwin installieren Sie win32-api-Header-und Bibliotheksdateien, dann link mit libws2_32 (compiler-option Aussehen wird -lws2_32).
MSVC++6 ist schon ein bisschen älter, aber Sie hat nicht erwähnt, wie Sie mit MSVC++9 und nmake (visual c++ express 2008).
Diese syntax für mich gearbeitet!