nmake Makefile 错误:链接:致命错误 LNK1104:无法打开文件“LIBCMT.lib”

问题描述 投票:0回答:1

我正在尝试使用 Visual Studio 2019 在 Windows 上使用 nmake makefile 编译 C 项目。当我在开发人员命令提示符中手动运行编译命令时,一切正常。但是,当我尝试使用 nmake 时,遇到以下错误:

LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.EXE"' : return code '0x2'
Stop.

这是我的 makefile 的相关部分:

# Define variables
CC = cl
CFLAGS = /MT /I include          /nologo /D_CRT_SECURE_NO_WARNINGS         /W4 /Od /DDEBUG
LIB = lib
LIBFLAGS = /OUT:my_library.lib /nologo
SRC_DIR = src
INCLUDE_DIR = include
LIB_NAME = my_library
OBJ = my_library.obj
TARGET = my_program.exe

# Default target
all: $(TARGET)

# Rule to compile the library source file
$(OBJ): $(SRC_DIR)\$(LIB_NAME).c
    @echo Compiling $(SRC_DIR)\$(LIB_NAME).c
    $(CC) $(CFLAGS) /c $(SRC_DIR)\$(LIB_NAME).c /Fo$(OBJ)

# Rule to create the static library
$(LIB_NAME).lib: $(OBJ)
    @echo Creating library $(LIB_NAME).lib
    $(LIB) $(LIBFLAGS) $(OBJ)

# Rule to compile the main program
$(TARGET): main.obj $(LIB_NAME).lib
    @echo Compiling and linking main.c to create $(TARGET)
    $(CC) /nologo /Fe$(TARGET) main.obj $(LIB_NAME).lib /link /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x64"

# Rule to compile main.c
main.obj: main.c
    @echo Compiling main.c
    $(CC) $(CFLAGS) /c main.c /Fomain.obj

# Clean up intermediate files
clean:
    @echo Cleaning up...
    del $(OBJ) $(LIB_NAME).lib main.obj $(TARGET)

环境: 视觉工作室 2019 Windows 10 在“Visual Studio 2019 的开发人员命令提示符”中运行命令

手动命令: 当我手动运行以下命令时,它们可以正常工作:

cl /MT /我包括 /nologo /D_CRT_SECURE_NO_WARNINGS /W4 /Od /DDEBUG /c src\my_library.c /Fomy_library.obj lib /OUT:my_library.lib /nologo my_library.obj cl /MT /I 包括 /nologo /D_CRT_SECURE_NO_WARNINGS /W4 /Od /DDEBUG /c main.c /Fomain.obj cl /nologo /Fe my_program.exe main.obj my_library.lib /link /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio�9\Professional\VC\Tools\MSVC .29.30133\lib\x64" / LIBPATH:"C:\Program Files (x86)\Windows Kits \lib .0.19041.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits \lib .0.19041.0 \um\x64"

问题:

1.  Why does nmake fail to find LIBCMT.lib when the manual commands work perfectly?
2.  How can I ensure that nmake correctly finds and links LIBCMT.lib?

任何帮助或建议将不胜感激。谢谢!

c linker-errors nmake
1个回答
0
投票

问题在于使用LIB作为变量名,从而重新定义了环境变量。将其更改为 LIBB 可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.