Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

设定 SDK 路径后无法使用 MSVC 工具链 #5983

Closed
Doekin opened this issue Dec 17, 2024 · 4 comments
Closed

设定 SDK 路径后无法使用 MSVC 工具链 #5983

Doekin opened this issue Dec 17, 2024 · 4 comments
Labels

Comments

@Doekin
Copy link
Contributor

Doekin commented Dec 17, 2024

Xmake 版本

xmake v2.9.6+HEAD.abd15c255

操作系统版本和架构

Windows 10

描述问题

不指定 SDK 路径时,XMake 正常工作
xmake f -c -vD --toolchain=msvc --sdk="C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools" 报错

期待的结果

如果指定 MSVC 工具链的 SDK 路径,仍可正常运行

工程配置

Hello World 程序
不指定 SDK 路径:xmake f -c -vD --toolchain=msvc
指定 SDK 路径:xmake f -c -vD --toolchain=msvc --sdk="C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools"

附加信息和错误日志

不指定 SDK 日志

$ xmake f -c -vD --toolchain=msvc
checking for platform ... windows
checking for architecture ... x64
checking for cl.exe ... C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.42.34433\bin\HostX64\x64\cl.exe
checking for Microsoft Visual Studio (x64) version ... 2022
checking for Microsoft C/C++ Compiler (x64) version ... 19.42.34435
checking for link.exe ... C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.42.34433\bin\HostX64\x64\link.exe
checking for the linker (ld) ... link.exe
configure
{
    network = public
    ccache = true
    ndk_stdcxx = true
    kind = static
    host = windows
    toolchain = msvc
    mingw = D:/Applications/Scoop/apps/mingw-mstorsjo-llvm-ucrt/current/
    proxy_pac = pac.lua
    vs = 2022
    arch = x64
    plat = windows
    proxy = socks5://127.0.0.1:20170
    mode = release
    clean = true
    theme = default
    buildir = build
}

指定 SDK 日志

$ xmake f -c -vD --toolchain=msvc --sdk="C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools"
checking for platform ... windows
checking for architecture ... x64
error: @programdir\core\main.lua:329: @programdir\actions\config\main.lua:157: target(mid_to_post): toolchain not found!
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1004]: in function 'raiselevel'
    [@programdir\core\sandbox\modules\utils.lua:143]: in function 'assert'
    [@programdir\actions\config\main.lua:157]: in function '_check_target_toolchains'
    [@programdir\actions\config\main.lua:403]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:244]:
    [@programdir\core\base\task.lua:491]: in function 'run'
    [@programdir\core\main.lua:327]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:406]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:1004: in function 'os.raiselevel'
        (...tail calls...)
        @programdir\core\main.lua:329: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:406: in function <@programdir\core\base\scheduler.lua:399>

这可能是预设的 WindowsSdkDir 与实际位置不符造成的

function find_build_tools(opt)
opt = opt or {}
local sdkdir = opt.sdkdir
if not sdkdir or not os.isdir(sdkdir) then
return
end
local variables = {}
local VCToolsVersion
local vs_toolset = opt.vs_toolset
if vs_toolset and os.isdir(path.join(sdkdir, "VC/Tools/MSVC", vs_toolset)) then
VCToolsVersion = vs_toolset
else
local dir = find_directory("14*", path.join(sdkdir, "VC/Tools/MSVC"))
if dir then
VCToolsVersion = path.filename(dir)
else
return
end
end
variables.VCToolsVersion = VCToolsVersion
variables.VCToolsInstallDir = path.join(sdkdir, "VC/Tools/MSVC", VCToolsVersion)
local WindowsSDKVersion
local vs_sdkver = opt.vs_sdkver
if vs_sdkver and os.isdir(path.join(sdkdir, "Windows Kits/10/Lib", vs_sdkver)) then
WindowsSDKVersion = vs_sdkver
else
local dir = find_directory("10*", path.join(sdkdir, "Windows Kits/10/Lib"))
if dir then
WindowsSDKVersion = path.filename(dir)
else
return
end
end
variables.WindowsSDKVersion = WindowsSDKVersion
variables.WindowsSdkDir = path.join(sdkdir, "Windows Kits/10")

在我的电脑上,Windows SDK 安装于 C:\Program Files (x86)\Windows Kits\10\,这是Visual Studio Installer 的默认安装位置

如果将 find_build_tools 函数中的 WindowsSdkDir 改为硬编码 C:\Program Files (x86)\Windows Kits\10\,就可以运行

- local dir = find_directory("10*", path.join(sdkdir, "Windows Kits/10/Lib"))
+ local dir = find_directory("10*", "C:/Program Files (x86)/Windows Kits/10/Lib")

- variables.WindowsSdkDir = path.join(sdkdir, "Windows Kits/10")
+ variables.WindowsSdkDir = "C:/Program Files (x86)/Windows Kits/10"

修改之后再指定 SDK

$ xmake f -c -vD --toolchain=msvc --sdk="C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools"
checking for platform ... windows
checking for architecture ... x64
checking for cl.exe ... C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64\cl.exe
checking for Microsoft C/C++ Compiler (x64) version ... 19.42.34435
checking for link.exe ... C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64\link.exe
checking for the linker (ld) ... link.exe
configure
{
    proxy = socks5://127.0.0.1:20170
    mode = release
    theme = default
    host = windows
    sdk = C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools
    plat = windows
    toolchain = msvc
    kind = static
    mingw = D:/Applications/Scoop/apps/mingw-mstorsjo-llvm-ucrt/current/
    ndk_stdcxx = true
    proxy_pac = pac.lua
    arch = x64
    clean = true
    buildir = build
    ccache = true
    network = public
}
@Issues-translate-bot
Copy link

Bot detected the issue body's language is not English, translate it automatically.


Title: The MSVC tool chain cannot be used after setting the SDK path.

@star-hengxing
Copy link
Contributor

官方 build tools 不应该用 sdk 参数,那是给 #5848 这些工具用的,目录结构完全不一样

@Doekin
Copy link
Contributor Author

Doekin commented Dec 17, 2024

噢,是这样啊

@Doekin Doekin closed this as completed Dec 17, 2024
@Issues-translate-bot
Copy link

Bot detected the issue body's language is not English, translate it automatically.


Oh, that's right

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants