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

これは、ファイルの 1 つで必要なmakeという Windows ライブラリにリンクする必要があるため、 を実行しようとするとエラーが発生します。Ws2_32.libWinsock2.hinclude.h

では、これを行うにはどうすればよいですか?-lオプションを試してみましたが、うまくいきません。スペースを含むパスではどのように機能しますか?

4

6 に答える 6

9

最初のステップ: 探しているライブラリを見つけます。私にとっては、次の場所にあります。

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

2 番目のステップでは、そのディレクトリを -L で渡します。

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

3 番目のステップでは、ライブラリの名前を -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

コンパイラに付属のライブラリとリンクする必要があります。cygwinの場合は、win32 apiヘッダーとライブラリファイルをインストールしてから、libws2_32とリンクする必要があります(コンパイラオプションは-lws2_32のようになります)。

于 2009-02-25T09:57:24.697 に答える
2

gcc がライブラリを検索-Lするディレクトリを指定するために使用します。(小文字のエル) を使用して、パス (およびいくつかのデフォルト) からリンクされるライブラリを指定します。-l-L

スペースを含むパスをエスケープするには、シェルの必要に応じてバックスラッシュ、一重引用符または二重引用符を使用します。GNU make のドキュメントGNU bash のドキュメントを参照してください。GNU makefile の他の部分のスペースについては、この記事を参照してください。

于 2009-02-23T09:39:07.423 に答える
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 に答える