How to install MSVC linker in CMake using MSYS

I had a problem getting CMake to use the MSVS linker instead of the MinGW linker. To support MSVC in MSYS, I implemented a bash script forcing CMake to use the MSVC compiler to create NMake files:

cmake -G "NMake Makefiles" -DMSVC = true -DCOMPILER_ROOT = $ COMPILER_ROOT -DCMAKE_PROFILE = $ CMAKE_PROFILE -DCMAKE_BUILD_TYPE = $ CMAKE_DEBUG -DCMAKE_CXX_LINKER = $ COMPILER_ROOT /

CMake uses the MSVC compiler correctly and creates NMake files as the Expected Result:

$ sh build.sh -msvc /c/binrev/development/vs2010/VC -p removing CMakeCache.txt removing temporary directory CMakeFiles Create MSVC based NMake files. -- The C compiler identification is MSVC -- The CXX compiler identification is MSVC -- Check for CL compiler version -- Check for CL compiler version - 1600 -- Check if this is a free VC compiler -- Check if this is a free VC compiler - no -- Check for working C compiler: c:/binrev/development/vs2010/VC/bin/cl.exe -- Check for working C compiler: c:/binrev/development/vs2010/VC/bin/cl.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: c:/binrev/development/vs2010/VC/bin/cl.exe -- Check for working CXX compiler: c:/binrev/development/vs2010/VC/bin/cl.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done Execute: brCore.cmake Linker path CMAKE_CXX_LINKER: c:/binrev/development/vs2010/VC/bin/link.exe 

But when nmake is called, CMAKE still uses the MinGW linker:

 Linking CXX shared library bin\brCore.dll c:\binrev\development\mingw\bin\ld.exe: unrecognized option '-Wl,--enable-auto-import' c:\binrev\development\mingw\bin\ld.exe: use the --help option for usage information LINK failed. with 1 NMAKE : fatal error U1077: "c:\binrev\development\cmake\bin\cmake.exe": Rückgabe-Code "0xffffffff" Stop. NMAKE : fatal error U1077: "c:\binrev\development\vs2010\VC\BIN\nmake.exe": Rückgabe-Code "0x2" Stop. NMAKE : fatal error U1077: "c:\binrev\development\vs2010\VC\BIN\nmake.exe": Rückgabe-Code "0x2" Stop. 

After calling the bash shell in CMakeCache, the MinGW linker is installed instead of the MSVC linker:

 //Path to a program. CMAKE_LINKER:FILEPATH=c:/binrev/development/mingw/bin/ld.exe 

Ok, I realized that I had to set the CMAKE_LINKER variable instead of CMAKE_CXX_LINKER to get the correct dependency. But now I got another glitch:

 Linking CXX shared library bin\brCore.dll Das System kann die angegebene Datei nicht finden mt.exe : general error c10100b1: Failed to load file "bin\brCore.dll". Das System kann die angegebene Datei nicht finden. MT failed. with 31 

Does anyone know what I did wrong? Thanks for any help.

Regards, Hellhound

+4
source share
1 answer

This sounds like the classic “more than one thing with the same name” in the PATH problem, with the “wrong” being in the PATH first.

If you put the MS tools directory at the beginning of PATH, will you still get the same problem?

If you type “what link” at the MSYS bash prompt, which file is the first in the environment?

Microsoft tools are probably not resistant to other tools with the same names as PATH. (that is, it is possible that mt.exe simply calls “link.exe” and expects it to be in PATH, and does not fully qualify it to ensure that it needs link.exe ...) Similarly for MSYS tools.

You really need to set up your build environment to avoid such problems when multiple development environments are installed on the same machine.

0
source

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


All Articles