Closed waruqi closed 5 years ago
在xmake f
的config.check()配置检测阶段(也就是platform/check的时候),会根据vs_sdkver的设置加载对应的vs环境,并且缓存对应的环境变量,而rule/target的on_load阶段比较靠后,是在检测之后才被执行到的,所以这个时候去修改vs_sdkver就没法重新加载新的vs环境了。
然而rule/target的on_load阶段没法再靠前了,必须要所有config检测完后,才能执行,确保这个时候所有的config都已经完全ok
而上层描述域的set_config主要用于设置一些默认配置,所以在configs检测前就会设置进去。
如果要在rule/target on_load等比较靠后的位置,再去修改vs_sdkver以及缓存的vs环境,除了修改vs_sdkver的配置,还需要修改重新设置config.set("__vcvarsall", vcvarsall)
,这块的实现可以参考下:windows/check.lua
这样做就比较繁琐了,暂时不推荐用户这么去设置修改,这块暂时还没有好的版本在rule中支持修改vs_sdkver,这个我得再想想。
其实大部分配置通过config.set就可以切换的,但是由于vs_sdkver和__vcvarsall是同步配置的,所以只改一个 没法生效
目前想到的解决办法是 改进下find_vstudio 一次性检测出所有的 vs_sdkver 和 vs_toolset 版本,以及对应的vcvarsall值,这样在 rule on_load的时候,即使只修改vs_sdkver配置,在platform/windows/environment里面加载vs环境的时候,就可以根据 当前的 vs_sdkver快速切换生效了
不过这样find_vstudio就会有不少冗余检测影响效率,另外一种可行并且更加有效的办法是: 在windows/environment.lua加载实际vs环境的时候,判断下 config.get vs_sdkver 的值跟 从__vcvarsall里面取出来的是否一致,不一致的话重新调用find_vstudio去加载实际的vcvarsall并更新配置,通过这种延迟更新检测环境的方式应该会更好些,回头我改进下试试
抓了最新的dev,回報嘗試的結果:
config.set("vs_sdkver", .........)
後,明顯執行時間變長。執行失敗,請看 log
checking for the cl.exe ... ok
checking for the Microsoft Visual Studio (x64) version ... 2015
configure
{
arch = x64
ccache = true
mode = debug
plat = windows
kind = static
buildir = ..\_build\vs2015-x64-debug
vs_sdkver = 10.0.10586.0
host = windows
vs = 2015
}
configure
{
arch = x64
ccache = true
mode = debug
host = windows
kind = static
buildir = ..\_build\vs2015-x64-debug
vs_sdkver = 10.0.10586.0
vs = vs2015
plat = windows
}
checking for the debug.x64 ...
checking for the link.exe ... no
checking for the linker (ld: link.exe) ... no
checking for the dmd ... no
checking for the dlang linker (dc-ld: dmd) ... no
checking for the ldc2 ... no
checking for the dlang linker (dc-ld: ldc2) ... no
checking for the gdc ... no
checking for the dlang linker (dc-ld: gdc) ... no
checking for the nvcc ... no
checking for the cuda linker (cu-ld: nvcc) ... no
error: cannot get program for ld
運行的腳本跟上面非常接近,底下給出完整的:
-- FILE: common.lua
rule("common")
on_load(function (target)
import("core.project.config")
if is_plat("windows") then
config.set("vs_sdkver", "10.0.10586.0", {force=true})
target:set("warnings", {"all", "error"})
target:set("languages", {"c99", "cxx11"})
target:add("defines", "UNICODE")
target:add("cxflags", "/EHsc")
target:add("cxflags", "/MP")
end
end)
-- FILE: xmake.lua includes("common.lua") target("GTestApp") add_rules("common") set_kind("binary") add_files("**.cpp")
我这边也装了个两个win10 sdk version用于测试切换,通过你给的xmake.lua demo配置,进行编译,我这测试是ok的,直接编译还是生成vcproj都ok,可以正常自动切换到新指定的sdk version上去
如果你这不行的话,可以在下面这块代码上,加点print,调下:
使用最新的dev分支ceef023,使用的腳本上面給了,編譯過程執行的指令是:
xmake config --verbose ^
--plat=windows ^
--vs=vs2015 ^
-a x64 ^
-m debug ^
-o ../vs2015-x64-debug/build && ^
xmake project --verbose ^
-k vs2015 ^
-a x64 ^
-m debug ^
../vs2015-x64-debug/build && ^
xmake
然後,我在environment.lua 裡面 local vstudio = find_vstudio( ......... ) 的下一行 table.dump(vstudio) ,很意外的是乍看起來印出的設定都正確。
不斷的印出類似的
***** LINE31 _enter "path"
LINE51 vs = vs2015
vs_sdkver = 10.0.10586.0
vs_toolset = nil
LINE55 vstudio has value
***** LINE31 _enter "lib"
LINE51 vs = vs2015
vs_sdkver = 10.0.10586.0
vs_toolset = nil
LINE55 vstudio has value
***** LINE31 _enter "include"
LINE51 vs = vs2015
vs_sdkver = 10.0.10586.0
vs_toolset = nil
LINE55 vstudio has value
***** LINE31 _enter "libpath"
LINE51 vs = vs2015
vs_sdkver = 10.0.10586.0
vs_toolset = nil
LINE55 vstudio has value
多次 vstudio 印出的內容都是:
{
2012 =
{
vcvarsall_bat = C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\..\VC\vcvarsall.bat
, version = 11.0
, vcvarsall =
{
x86 =
{
path = D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
}
, x64 =
{
path = D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
}
}
}
, 2013 =
{
vcvarsall_bat = C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat
, version = 12.0
, vcvarsall =
{
x86 =
{
path = D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
}
, x64 =
{
path = D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
}
}
}
, 2015 =
{
vcvarsall_bat = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
, version = 14.0
, vcvarsall =
{
x86 =
{
libpath = C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References;\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral;
, UniversalCRTSdkDir = C:\Program Files (x86)\Windows Kits\10\
, UCRTVersion = 10.0.10240.0
, VSInstallDir = C:\Program Files (x86)\Microsoft Visual Studio 14.0\
, DevEnvdir = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\
, path = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\MSBuild\14.0\bin;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;C:\Program Files (x86)\Microsoft
Visual Studio 14.0\VC\VCPackages;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\;D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
, WindowsLibPath = C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
, WindowsSDKVersion = 10.0.10240.0
, WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10\
, lib = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\um\x86;
, include = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\winrt;
, VCInstallDir = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\
}
, x64 =
{
libpath = C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References;\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral;
, UniversalCRTSdkDir = C:\Program Files (x86)\Windows Kits\10\
, UCRTVersion = 10.0.10240.0
, VSInstallDir = C:\Program Files (x86)\Microsoft Visual Studio 14.0\
, path = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\MSBuild\14.0\bin\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\;D:\ApexWorkspace\libGDK\Tools\xmake\bin\winenv\bin;D:\ApexWorkspace\libGDK\Demos\GTestApp\_build\vs2015-x64-debug\.xmake\prefix\windows\x64\release\bin;C:\Users\localuser\AppData\Roaming\.xmake\prefix\windows\x64\release\bin;D:\ApexWorkspace\libGDK\Tools\xmake\bin;C:\Program Files (x86)\SCE\ORBIS SDKs\5.500\host_tools\bin;C:\Program Files (x86)\SCE\Common\SceVSI-VS14\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Target Manager Server\bin;C:\Program Files (x86)\SCE\ORBIS\Tools\Publishing Tools\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\Git LFS;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\TortoiseSVN\bin;C:\software\xmake;C:\Program Files\CMake\bin;C:\mingw-builds\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32\bin;D:\NVPACK\jdk1.8.0_77\bin;D:\NVPACK\apache-ant-1.8.2\bin;D:\NVPACK\gradle-4.1-rc-2\bin;D:\NVPACK\android-ndk-r15c;D:\NVPACK\android-sdk-windows\extras\android\support;D:\NVPACK\android-sdk-windows\build-tools;D:\NVPACK\android-sdk-windows\platform-tools;D:\NVPACK\android-sdk-windows\tools;C:\Users\localuser\AppData\Local\Microsoft\WindowsApps;C:\Users\localuser\AppData\Local\Programs\Microsoft VS Code\bin;C:\software\LLVM\clang_7.0.0\bin;C:\Users\localuser\AppData\Roaming\npm;C:\software\LuaTools;C:\Program Files (x86)\Common Files\Acronis\TibMounter64
, WindowsLibPath = C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
, WindowsSDKVersion = 10.0.10240.0
, WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10\
, lib = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\um\x64;
, include = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\winrt;
, VCInstallDir = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\
}
}
}
}
checking for the link.exe ... no
checking for the linker (ld: link.exe) ... no
checking for the dmd ... no
checking for the dlang linker (dc-ld: dmd) ... no
checking for the ldc2 ... no
checking for the dlang linker (dc-ld: ldc2) ... no
checking for the gdc ... no
checking for the dlang linker (dc-ld: gdc) ... no
checking for the nvcc ... no
checking for the cuda linker (cu-ld: nvcc) ... no
我看你指定config.set修改成的是10.0.10586.0,但是重新检测find_vstudio vs2015返回的是: WindowsSDKVersion = 10.0.10240.0 很奇怪。。看着就像是没找对新设置的sdkver的vs环境
checking for the link.exe ... no checking for the linker (ld: link.exe) ... no
这些检测失败,主要是加载新的的vcvarsall中对应的path, lib到环境变量后,没有找到相关cl等编译工具而已,所以只要确定加载的10.0.10586.0的path已经设置生效,并且这个path下 确实有相关 cl.exe link.exe,应该是可以找到的
意外的是乍看起來印出的設定都正確。
不斷的印出類似的 ***** LINE31 _enter "path" vs = vs2015 vs_sdkver = 10.0.10586.0 LINE55 vstudio has value
这两个本身就是已经被config.set修改了,肯定打印出来的是ok的,关键是得看通过config.set设置完,重新find_vstudio后返回的vcvarsall里面WindowsSDKVersion的值,是否确实是新设置的sdkver
另外有個疑惑就是,因為 vcvarsall = (vstudio[vs] or {}).vcvarsall or {}
會使用 vs 變量從表中取值,但是在使用 --verbose 的指令時有觀察到,configure 顯示的 vs 有兩種值,分別為vs2015
和2015
,不曉得是否有影響?
configure
{
winxp = false
ccache = true
mode = debug
plat = windows
vs = 2015 <--------------------------
kind = static
buildir = ..\_build\vs2015-x64-debug
vs_sdkver = 10.0.10586.0
host = windows
arch = x64
}
configure
{
winxp = false
ccache = true
mode = debug
plat = windows
host = windows
kind = static
buildir = ..\_build\vs2015-x64-debug
vs = vs2015 <--------------------------
vs_sdkver = 10.0.10240.0
arch = x64
}
底下會印出 vstudio has value
但是vcvarsall 和 vsenv 的 dump是空的。
if switch_vsenv then
-- find vstudio
local vstudio = find_vstudio({vcvars_ver = config.get("vs_toolset"), sdkver = vs_sdkver})
if vstudio then
print("vstudio has value")
vcvarsall = (vstudio[vs] or {}).vcvarsall or {}
vsenv = vcvarsall[arch] or {}
table.dump(vcvarsall)
print("")
table.dump(vsenv)
print("")
if vsenv and vsenv.path and vsenv.include and vsenv.lib then
config.set("__vcvarsall", vcvarsall)
end
end
end
大致上找到原因了,我在xmake config 指令給 --vs=vs2015 ,只要改成 --vs=2015 就正常了,指令的使用有所誤解,把project --kind=vs2015 和--vs=2015想當然地混淆在一起了。哈哈...用了錯誤的參數至今才發現。
建議修改 xmake config 指令說明,至少需要個明確版本範例。或是參數錯誤檢查機制。
--vs=VS The Microsoft Visual Studio (default: auto)
有錯誤的編譯過程執行的指令是:
xmake config --verbose ^
--plat=windows ^
--vs=vs2015 ^
-a x64 ^
-m debug ^
-o ../vs2015-x64-debug/build && ^
xmake project --verbose ^
-k vs2015 ^
-a x64 ^
-m debug ^
../vs2015-x64-debug/build && ^
xmake
ok, 我在xmake f -h里面对--vs,加上传参提示了。。可以更新下dev分支。
順便回報一下試驗結果,在xmake描述域底下,set_config 設置的值可以讓 vs project 產生過程中正確讀取,目前有問題的是設置在 rule 作用域的時候。
Originally posted by @orzuk-lmj in https://github.com/tboox/xmake/issues/260#issuecomment-445171246