gpt4 book ai didi

visual-studio-2010 - 如何使用 MSYS 在 CMake 中设置 MSVC 链接器

转载 作者:行者123 更新时间:2023-12-01 06:43:16 32 4
gpt4 key购买 nike

我有一个问题要强制 CMake 使用 MSVS 链接器而不是 MinGW
链接器。为了在 MSYS 中支持 MSVC,我实现了一个强制 CMake 的 bash 脚本
使用 MSVC 编译器创建 NMake 文件:

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



CMake 正确使用 MSVC 编译器并将 NMake 文件创建为
预期的:
$ 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

但是在调用 nmake 时,CMAKE 仍然使用 MinGW 链接器:
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.

在 CMakeCache 中调用 bash shell 脚本后,将设置 MinGW 链接器而不是 MSVC 链接器:
//Path to a program.
CMAKE_LINKER:FILEPATH=c:/binrev/development/mingw/bin/ld.exe

好的,我发现我必须设置 CMAKE_LINKER 变量而不是 CMAKE_CXX_LINKER 以获得正确的依赖项。但现在我又失败了:
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

有谁知道我做错了什么?
谢谢你的帮助。

此致,
hell 犬

最佳答案

这听起来像是 PATH 问题中经典的“多个同名事物”,“错误”的事物首先出现在 PATH 中。

如果你把带有 MS 工具的目录放在 PATH 的前面,你还会遇到同样的问题吗?

如果您在 MSYS bash 提示符中键入“哪个链接”,那么环境中的第一个文件是什么?

Microsoft 的工具对于 PATH 中具有相同名称的其他工具可能并不健壮。 (即——也许 mt.exe 只是调用“link.exe”并期望它在 PATH 中,并且没有完全限定它以确保它需要的 link.exe...)对于 MSYS 工具也是如此。

当您在一台机器上安装多个开发环境时,您确实必须仔细设置您的构建环境,以避免出现此类问题。

关于visual-studio-2010 - 如何使用 MSYS 在 CMake 中设置 MSVC 链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165230/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com