c ++ - Makefiles på windows med g ++, der forbinder et bibliotek

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er blevet træt af MSVC ++ 6 og hvordan alle fortæller mig altid, at det er en crappy compiler og sådan.


Så nu har jeg besluttet at prøve at bruge vim plus g ++ og makefiles. Her er mit problem; Jeg har følgende 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


Dette giver en fejl, når du prøver at make, fordi jeg skal linke til et Windows-bibliotek kaldet Ws2\_32.lib, hvilket er nødvendigt af Winsock2.h, som jeg include i en af ​​mine .h filer.


Så hvordan gør jeg det her? Jeg har prøvet indstillingen -l, men jeg kan ikke få det til at fungere. Hvordan virker det med en sti, der har mellemrum?

Bedste reference


Første skridt: Find biblioteket, du leder efter. For mig er det i:


C:Program FilesMicrosoft Visual StudioVC98Lib


Andet trin, passér den mappe med -L:


LINKFLAGS=-L"C:Program FilesMicrosoft Visual StudioVC98Lib"


Tredje trin, send bibliotekets navn med -l (små bogstaver L):


LINKFLAGS=-L"C:Program FilesMicrosoft Visual StudioVC98Lib" -lWs2\_32


Brug derefter det:


main.exe: main.o Accel.o
   $(CC) $(LINKFLAGS) -o main.exe main.o Accel.o 

Andre referencer 1


Dette er ikke et svar på dit spørgsmål, men jeg foreslår at bruge cmake. Det er en multi-platform multi-build miljøprojektfilgenerator. Synaksen af ​​CMake-filer er ganske enkel (bestemt enklere end Makefile), og det vil generere Makefile eller Visual Studio-projekter på forespørgsel. [16]


Problem med håndkodede Makefile er så snart, at dit afhængighedstræ vokser så stort, at der opretholdes alle regler for, hvad der skal opbygges, hvad der bliver en meget kedelig handling. Derfor er der tonsvis af Makefile generatorer (autotools, CMake) eller Makefile alternativer (Scons, waf, bjam, ....)

Andre referencer 2


Brug -L til at angive en mappe, hvor gcc skal søge efter biblioteker. Brug -l (små bogstaver ell) til at angive et bibliotek, der skal forbindes fra -L stierne (og nogle standardindstillinger). [17]


For at undslippe stier med mellemrum, brug backslashes, enkelt eller dobbelt citater som din skal kræver. Se GNU-dokumentationen, GNU bash-dokumentationen. Se denne artikel for oplysninger om mellemrum i andre dele af GNU makefiles. [18] [19] [20]

Andre referencer 3


Du skal linke med bibliotek, der leveres sammen med kompilatoren. I tilfælde af cygwin skal du installere win32 api headers og biblioteksfiler, så link til libws2\_32 (kompileringsindstilling vil ligne -lws2\_32).

Andre referencer 4


MSVC ++ 6 kommer lidt, men du har ikke nævnt, hvordan du kom på med MSVC ++ 9 og nmake (visual c ++ express 2008).

Andre referencer 5


LIBS = -L"..Microsoft SDKsWindowsv6.0ALib" -lWS2\_32

$(CC) ... -o ... ... $(LIBS)


Denne syntaks fungerede for mig!