我已经厌倦了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}}选项,但我无法使其正常工作。它如何使用包含空格的路径?
答案 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 documentation,GNU 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)
这种语法对我有用!