C 为什么我在编译时会出现链接错误,即使我已经为库设置了所有路径

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 ===========================================

使用nmake时出现编译错误

在那里,我在一个目录中有两个文件TEST.C和TEST.DEF,一个文件名为“Makefile”,另一个文件名为“Makefile.pc”。这个“Makefile.pc”的一行代码如下所示

包含Makefile

表示仅在Makefile.pc文件中包含Makefile

Makefile包含构建my代码的代码,我将粘贴Makefile代码

# 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目录路径,并且工作正常。