C 为什么我在编译时会出现链接错误,即使我已经为库设置了所有路径
使用nmake时出现编译错误 在那里,我在一个目录中有两个文件TEST.C和TEST.DEF,一个文件名为“Makefile”,另一个文件名为“Makefile.pc”。这个“Makefile.pc”的一行代码如下所示 包含Makefile 表示仅在Makefile.pc文件中包含Makefile Makefile包含构建my代码的代码,我将粘贴Makefile代码C 为什么我在编译时会出现链接错误,即使我已经为库设置了所有路径,c,visual-studio,makefile,nmake,makefile-project,C,Visual Studio,Makefile,Nmake,Makefile Project,使用nmake时出现编译错误 在那里,我在一个目录中有两个文件TEST.C和TEST.DEF,一个文件名为“Makefile”,另一个文件名为“Makefile.pc”。这个“Makefile.pc”的一行代码如下所示 包含Makefile 表示仅在Makefile.pc文件中包含Makefile Makefile包含构建my代码的代码,我将粘贴Makefile代码 # Targets and objects ===========================================
# Targets and objects =========================================================
WIN_TARGET = test.exe
WIN_SRCS = TEST.C
WIN_OBJS = $(WIN_SRCS:.C=.OBJ)
WIN_DEF = TEST.DEF
# Compiler stuff ==============================================================
CMP_EXEC = CL /Fo
CMP_FLAGS_WIN = /c /nologo
# Linker stuff ================================================================
LNK_EXEC = LINK
LNK_FLAGS_WIN = /NOLOGO /ONERROR:NOEXE /NOD /ALIGN:16 /STACK:10240
# Rules =======================================================================
all: $(WIN_TARGET)
build: regenerate all
$(WIN_TARGET): $(WIN_OBJS)
@ ECHO ~~~~~ Linking $(WIN_TARGET)
@ $(LNK_EXEC) $(LNK_FLAGS_WIN) $(WIN_OBJS),$(WIN_TARGET),NUL,llibcew \
libw,$(WIN_DEF)
@ ECHO ~~~~~ $(WIN_TARGET) done
$(WIN_OBJS): $(WIN_SRCS) Makefile
@ ECHO ===== Compiling $(*).C
@ $(CMP_EXEC)$(@) $(CMP_FLAGS_WIN) $(@D)\$(*F).C
regenerate:
clean:
@ DEL $(WIN_TARGET) $(WIN_OBJS)
有两个库“llibcew”和“libw”
我得到的链接器错误为:
"LINK : fatal error LNK1181: cannot open input file "CCM_NPW.OBJ,ccm_npw.exe,NUL,llibcew".
链接器文件之间不应使用逗号。正如您在错误消息中所看到的,它将
CCM\u NPW.OBJ、CCM\u NPW.exe、NUL、llibcew
视为一个文件名。还有其他问题,例如将目标(输出)文件列为输入文件。我建议你花点时间去做。我不知道nmake,但如果它像make,那么规则$(WIN\u OBJS):$(WIN\u SRCS)
将在WIN\u SRCS
包含多个文件时出错:它将始终重新编译列表中的第一个文件。@madscitist在这方面,nmake
和make
都很相似。非常感谢你们为我的查询提供了这样一个完整的解决方案,现在问题已经解决了,我在环境变量中创建了独立的lib目录路径,并且工作正常。链接器文件之间不应该有逗号。正如您在错误消息中所看到的,它将CCM\u NPW.OBJ、CCM\u NPW.exe、NUL、llibcew
视为一个文件名。还有其他问题,例如将目标(输出)文件列为输入文件。我建议你花点时间去做。我不知道nmake,但如果它像make,那么规则$(WIN\u OBJS):$(WIN\u SRCS)
将在WIN\u SRCS
包含多个文件时出错:它将始终重新编译列表中的第一个文件。@madscitist在这方面,nmake
和make
都是相似的。非常感谢大家为我的查询提供了这样一个完整的解决方案,现在问题已经解决了,我在环境变量中创建了独立的lib目录路径,并且工作正常。