1

Makeは、すべての人にとって何の関係もないと言っています。私はインターネットを検索しましたが、このことを言う状況は何十もあります。しかし、解決策はどれも役に立ちませんでした...

私は MinGW を使用しています。私のディレクトリにはRes.defRes.hRes.cppおよびRes.oを実行した後に取得したものがありますg++ -c Res.cpp

メイクファイルは次のとおりです。

CFLAGS = -c -G3 -GX -Od -W3 -Zi -D_X86_=1 -DWIN32 -D_WIN32 -nologo -DSTRICT
LFLAGS = -debug:mapped,full -debugtype:cv -nologo
LIBS = libc.lib kernel32.lib user32.lib 
SRCS = Res.def Res.cpp Res.h
OBJS = Res.o

all: Res.dll

Res.dll: $(SRCS) $(OBJS)


$(SRCS):
    co $(SRCS)

.cpp.obj:
    cl $(CFLAGS) $*.cpp
.rc.rbj:
    rc $*.rc
    cvtres -i386 $*.res -o $*.rbj
.obj.dll:
    link $(LFLAGS) -DLL -subsystem:windows -out:$*.dll \
        -def:$*.def $(OBJS) $(LIBS)
.obj.exe:
    link $(LFLAGS) -subsystem:console -out:$*.exe \
        $*.obj $(EXELIBS)

dll を作成するにはどうすればよいですか?

アップデート:

私は Java 出身で、C や C++ を理解できるようになったら、make ファイルの完全な初心者であり、コードにいくつかの変更を加えた後、オープンソースの dll を再アセンブルしようとしています。C アプリケーションのビルドについて読んだことがありますが、あまり役に立ちません。元のメイクファイルのOBJS行は異なっていました。

OBJS = Res.obj

OBJS = Res.oどうにかしてdllをビルドしようとしたときに変更しました。元のファイルは次のようになります。

CFLAGS = -c -G3 -GX -Od -W3 -Zi -D_X86_=1 -DWIN32 -D_WIN32 -nologo -DSTRICT
LFLAGS = -debug:mapped,full -debugtype:cv -nologo
LIBS = libc.lib kernel32.lib user32.lib 
SRCS = Res.def Res.cpp Res.h
OBJS = Res.obj

all: Res.dll

Res.dll: $(SRCS) $(OBJS)


$(SRCS):
    co $(SRCS)

.cpp.obj:
    cl $(CFLAGS) $*.cpp
.rc.rbj:
    rc $*.rc
    cvtres -i386 $*.res -o $*.rbj
.obj.dll:
    link $(LFLAGS) -DLL -subsystem:windows -out:$*.dll \
        -def:$*.def $(OBJS) $(LIBS)
.obj.exe:
    link $(LFLAGS) -subsystem:console -out:$*.exe \
        $*.obj $(EXELIBS)

そのデフォルト行では、別のことを言っていました:

*** No rule to make target `Res.obj`, needed by `Res.dll`. Stop.

この単純な dll をアセンブルする方法を教えてください。私は完全に迷っています。これらの複雑さは、単一のソースファイルからライブラリを構築するという単純なタスクにとってはやり過ぎのように思えます....?

4

1 に答える 1

1

$(OBJS)あなたのディレクトリにはすでに最新の があるようですall

通常、リンクは複数のオブジェクト ファイルに関係するため、バイナリごとに明示的にリンク ルールを指定する方が一般的です。

Res.dll: $(OBJS) Res.def
      link ...

(Res.dll は .h と .cpp に直接依存しないことに注意してください)。

もちろん、代わりに .o ファイルから .dll ファイルを作成するルールを指定することもできます。これはあなたがやろうとしていることだと思いますが、あなたの Makefile には.objファイル ( .oではない) から .dll ファイルを構築するためのルールしかありません。

もう 1 つ:Res.oファイルは Res.cpp と Res.h に依存する必要があります。したがって、次のようなものが必要です。

Res.o: Res.h

.cpp.o:
      g++ -c $<
于 2013-06-07T21:38:54.317 に答える