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
source share