使用g ++在Windows上创建文件,链接库

时间:2009-02-23 09:25:57

标签: c++ windows makefile g++

我已经厌倦了MSVC ++ 6以及每个人总是告诉我这是一个糟糕的编译器等等。

所以现在我决定尝试使用vim plus g ++和makefile。这是我的问题;我有以下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

这在尝试make时出错,因为我需要链接到Ws2_32.lib所需的名为Winsock2.h的Windows库,include我需要.h我的-l个文件之一。

那我该怎么做?我已经尝试了{{1}}选项,但我无法使其正常工作。它如何使用包含空格的路径?

6 个答案:

答案 0 :(得分:8)

第一步:找到您要查找的库。对我来说,它在:

C:\Program Files\Microsoft Visual Studio\VC98\Lib

第二步,使用-L:

传递该目录
LINKFLAGS=-L"C:\Program Files\Microsoft Visual Studio\VC98\Lib"

第三步,使用-l(小写L)传递库的名称:

LINKFLAGS=-L"C:\Program Files\Microsoft Visual Studio\VC98\Lib" -lWs2_32

然后使用它:

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

答案 1 :(得分:3)

这不是您问题的答案,但我建议使用cmake。它是一个多平台的多构建environement项目文件生成器。 CMake文件的语法非常简单(当然比Makefile简单),它会根据请求生成Makefile或Visual Studio项目。

手动编码Makefile的问题就是很快,你的依赖树变得如此之大,以至于维护所有需要构建的规则变得非常繁琐。因此,有大量的Makefile生成器(autotools,CMake)或Makefile替代品(Scons,waf,bjam,....)

答案 2 :(得分:2)

使用-L指定gcc should search for libraries的目录。使用-l(小写字母)指定要从-L路径(以及某些默认值)链接的库。

要使用空格转义路径,请在shell需要时使用反斜杠,单引号或双引号。请参阅GNU make documentationGNU bash documentation。请参阅此文章了解info about spaces in other parts of GNU makefiles

答案 3 :(得分:2)

您应该与编译器提供的库链接。如果是cygwin,你应该安装win32 api头文件和库文件,然后用libws2_32链接(编译器选项看起来像-lws2_32)。

答案 4 :(得分:0)

MSVC ++ 6正在进行中,但你没有提到你如何使用MSVC ++ 9和nmake(visual c ++ express 2008)。

答案 5 :(得分:0)

LIBS = -L"..\Microsoft SDKs\Windows\v6.0A\Lib" -lWS2_32

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

这种语法对我有用!