【发布时间】:2013-06-07 21:27:35
【问题描述】:
Make 说它与所有人无关。我已经在互联网上搜索过,它说这件事的情况有几十种。不过,这些解决方案都没有帮助...
我使用 MinGW,在我的目录中我有 Res.def、Res.h、Res.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++ 时,我完全不擅长制作文件,因此我试图在对代码进行一些更改后重新组装一个开源 dll。我已经阅读了有关构建 C 应用程序的信息,但它并没有太大帮助。原来的 make 文件有 OBJS 行不同,它是
OBJS = Res.obj
在尝试以某种方式构建 dll 时,我已将其更改为 OBJS = Res.o。所以原来的文件是:
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 吗?我完全迷路了。在我看来,对于从单个源文件构建库这样简单的任务来说,这些复杂性有点过头了......?
【问题讨论】:
-
您似乎没有
.o文件的规则。 -
@KerrekSB:是的,抱歉,请看更新
-
我没看到。
Res.o仍然没有规则。 -
@KerrekSB:呵呵,好的,我已经更新了)