我正在尝试使用 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?
任何帮助或建议将不胜感激。谢谢!
问题在于使用LIB作为变量名,从而重新定义了环境变量。将其更改为 LIBB 可以解决问题。