6

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

所以现在我决定尝试使用 vim 加上 g++ 和 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,因为我需要链接到一个名为 的 Windows 库Ws2_32.lib,这是Winsock2.hinclude在我的一个.h文件中需要的。

那么我该怎么做呢?我已经尝试过这个-l选项,但我无法让它工作。它如何与有空格的路径一起工作?

4

6 回答 6

9

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

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 
于 2009-02-23T09:40:57.717 回答
3

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

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

于 2009-02-23T09:35:38.820 回答
2

用于-L指定gcc 应在其中搜索库的目录。使用-l(小写 ell)指定要从-L路径(和一些默认值)链接的库。

要使用空格转义路径,请根据 shell 的需要使用反斜杠、单引号或双引号。请参阅GNU make 文档GNU bash 文档有关GNU makefile 其他部分中的空格的信息,请参阅这篇文章。

于 2009-02-23T09:39:07.423 回答
2

您应该链接到编译器提供的库。如果是 cygwin,您应该安装 win32 api 头文件和库文件,然后与 libws2_32 链接(编译器选项将类似于 -lws2_32)。

于 2009-02-25T09:57:24.697 回答
0

MSVC++6 有点进展,但你没有提到你是如何使用 MSVC++9 和 nmake 的(visual c++ express 2008)。

于 2009-02-23T09:29:52.877 回答
0
LIBS = -L"..\Microsoft SDKs\Windows\v6.0A\Lib" -lWS2_32

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

这种语法对我有用!

于 2010-08-01T19:47:32.783 回答