[英]Detect MSVC version in GYP
我試圖在binding.gyp文件中的node-gyp configure
期間檢測msvc版本。 基本上,我希望能夠基於Visual C ++版本鏈接特定的第三方庫:
['OS=="win"' and 'toolset="vc12"' , {
'libraries': [
"opencv/lib/vc12/opencv_world300.lib"
],
}],
['OS=="win"' and 'toolset="vc11"' , {
'libraries': [
"opencv/lib/vc11/opencv_world300.lib"
],
}],
['OS=="win"' and 'toolset="vc10"' , {
'libraries': [
"opencv/lib/vc10/opencv_world300.lib"
],
}]
不幸的是, _toolset
既沒有定義toolset
,也沒有_toolset
甚至$(TOOLSET)
變量。 我無法在GYP文檔中找到這樣的變量。 有可能嗎?
我無法從文檔中找出如何檢查工具集版本,但只找到頂級設置: https : //chromium.googlesource.com/external/gyp/+/master/docs/UserDocumentation.md#典型的可執行文件的原型骷髏文件 。
但是,在GitHub上@saper 想通了使用MSVS_VERSION
代替:
['OS=="win"' and 'MSVS_VERSION=="2013"' , {
'libraries': [
"opencv/lib/vc12/opencv_world300.lib"
],
}],
['OS=="win"' and 'MSVS_VERSION=="2012"' , {
'libraries': [
"opencv/lib/vc11/opencv_world300.lib"
],
}],
['OS=="win"' and 'MSVS_VERSION=="2010"' , {
'libraries': [
"opencv/lib/vc10/opencv_world300.lib"
],
}]
(在你的例子中,雖然toolset
令牌不是由gyp標識的, =
應該用==
替換)
示例: https : //github.com/saper/node-sass/blob/c7e9cf0f0e0098e8316bd41722fc2edf4a835d9f/src/libsass.gyp#L91-L94 。
不幸的是,這些條件不會在.targets
或.vcxproj
文件中發出(例如這個 ),但它會在對給定版本的MSVS進行單獨的條件后處理后發出.vcxproj
,從而導致.vcxproj
文件與之不兼容較新/較舊版本的錄像機。
但是,MSVS版本可以通過多種方式覆蓋gyp,例如,使用環境變量:
在CMD中:
SET GYP_MSVS_VERSION=2012
或者在PowerShell中:
$env:GYP_MSVS_VERSION=2015
它也可以作為命令行參數傳遞:
node_modules/.bin/node-gyp build --msvs_version=2012
如果同時存在env-var和命令行參數,則CLI arg將優先。
此CLI參數可以提供給npm任務,例如,為您的程序包的所有Windows使用者強制使用特定版本的MSVCR,否則會出錯。
從那以后......
從CLI arg,無法指定最小MSVS版本沒有這樣的標志:-- --min-msvs-version
。
如果安裝了多個版本的MSBUILD,node-gyp的MSBUILD發現( 目前 )將忽略.vcxproj
的首選/必需版本的工具集,但優先於PATH中的那個。 在這種情況下,您可能會收到錯誤,例如,如果您使用的是僅由VS2015提供的C99 / C ++ 1 [1/4/7]功能。 為了解決這種情況:
node-gyp build
或rebuild
,使用node-gyp configure
后跟"%ProgramFiles(x86)%\\MSBuild\\14.0\\Bin\\MSBuild" build/binding.sln /p:Configuration=Release
(或者來自posh,它會成為: &"${env:ProgramFiles(x86)}\\MSBuild\\14.0\\Bin\\MSBuild" build\\binding.sln /p:Configuration=Release
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.