C: LINK.EXE exits the Makefile, but not from the command line

When I try to establish a link from a makefile, I get the following error:

LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'. 

Executing the Makefile:

 C:\Users\snmcdonald\Desktop\winMake2\winMake2>nmake "_DEBUG=" /f win2.mk build Microsoft (R) Program Maintenance Utility Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. cl /c /ZI /Fo"Debug\\" /Fe"Debug\\" main.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. main.c cl /c /ZI /Fo"Debug\\" /Fe"Debug\\" lib.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. lib.c lib Debug\lib.obj /out:Debug\lib.lib Microsoft (R) Library Manager Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. link Debug\main.obj Debug\lib.lib /out:Debug\main.exe Microsoft (R) Incremental Linker Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. main.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specif ication LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib' NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BI N\link.EXE"' : return code '0x450' Stop. 

However, if I restart the same line that failed and the link from the console, I get a successful build. I use the same lib and obj that were created from my make file.

Console Execution:

 C:\Users\snmcdonald\Desktop\winMake2\winMake2>link Debug\main.obj Debug\lib.lib /o ut:Debug\main.exe Microsoft (R) Incremental Linker Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. main.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specif ication C:\Users\SHANEM~1\Desktop\winMake2\winMake2>debug\main.exe print from lib 

I have included my makefile for reference.

Makefile

 !ifdef _DEBUG CC = cl CFLAGS = /c /ZI FILES = *.c OUT = /Fo"Debug\\" /Fe"Debug\\" LINKOUT = /out:Debug DIR = Debug !else CC = cl CFLAGS = /O2 FILES = *.c OUT = /Fo"Release\\" /Fe"Release\\" LINKOUT = /out:Release DIR = Release !endif LIB = lib LINK = link RM = del RMFLAGS = *.ojb *.exe 2>NUL build: main.exe clean: $(RM) $(RMFLAGS) rebuild: clean build main.exe: main.obj lib.lib $(LINK) $(DIR)\main.obj $(DIR)\lib.lib $(LINKOUT)\main.exe lib.lib: lib.obj $(LIB) $(DIR)\lib.obj $(LINKOUT)\lib.lib main.obj: $(CC) $(CFLAGS) $(OUT) main.c lib.obj: $(CC) $(CFLAGS) $(OUT) lib.c 

Testing

I tested this on both Visual C version 9 and version 10. I am confused why it crashes in my makefile but succeeds when manually entered at the command prompt.

Decision:

 nmake /E /f win2.mk build 

/ E - redefines macro-vars with ecological paths.

+4
source share
2 answers

Lib = lib

This spins the LIB environment variable. Yes, / E will fix this, but your next project, which really needs lib.exe, will fail. Choose a different name, win32.mak uses "implib".

+4
source

The file must exist in ... \ Microsoft Visual Studio 8 \ VC \ lib

This may be the difference in the settings of the environment variables. Check which environment variable parameters are started manually from the command line.

http://us.generation-nt.com/answer/lnk1104-open-file-libcmt-lib-help-21575202.html

The LIB environment variable should contain the path to your various library directories. You can also run VCVARS32.BAT, which will automatically configure the environment for you. If you run a large line building command, I recommend creating a shortcut that calls the above mentioned VSVARS32.BAT

0
source

Source: https://habr.com/ru/post/1332587/


All Articles