Ben*_*her 7 c++ cmd crt visual-studio-2015
使用Visual Studio 2015,我无法再使用命令行工具编译和链接简单的C++程序.
考虑main.cpp:
#include <stdlib.h>
int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)
在以前的版本中(例如Visual Studio 2012),我能够轻松地编译和链接main.cpp:
C:\Users\bkircher\src\test>cl main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
main.cpp
Microsoft (R) Incremental Linker Version 11.00.61030.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
main.obj
Run Code Online (Sandbox Code Playgroud)
并做了.
但是,在Visual Studio 2015中,我不再设置正确的CRT包含和库路径:
C:\Users\bkircher\src\test>cl main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
main.cpp
main.cpp(1): fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)
据我所知,Microsoft将C运行时分发为新的Windows操作系统组件Universal CRT.
如介绍通用CRT中所述,我应该使用以下MSBuild属性来查找适当的路径
$(UniversalCRT_IncludePath)
$(UniversalCRT_LibraryPath_x64)
Run Code Online (Sandbox Code Playgroud)
尽管如此,我如何获得适当的库并包含除devenv或MSBuild之外的构建系统的路径?
为了它:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set include
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\wdf\ucrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um;C:\Program Files (x86)\Windows Kits\10\include\wdf\shared;C:\Program Files (x86)\Windows Kits\10\include\wdf\um;C:\Program Files (x86)\Windows Kits\10\include\wdf\winrt;
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set lib
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\wdf\ucrt\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\wdf\um\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;C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\1.0.0.0;C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.FoundationContract\1.0.0.0;C:\Program Files (x86)\Windows Kits\10\References\indows.Networking.Connectivity.WwanContract\1.0.0.0;C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral;
Run Code Online (Sandbox Code Playgroud)
包括环境变量的内容是个好主意.根据出现的路径,您似乎已安装Windows驱动程序工具包,并且您遇到Connect上报告的此问题.
根据问题的描述,wdfWDK创建的目录会混淆尝试确定可用的最新SDK版本的批处理文件.例如,而不是
C:\Program Files (x86)\Windows Kits\10\include\wdf\ucrt
Run Code Online (Sandbox Code Playgroud)
在INCLUDE变量中,你应该有类似的东西
C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt
Run Code Online (Sandbox Code Playgroud)
"地毯式轰炸"解决方案:卸载WDK,确保wdf目录消失,事情应恢复正常.
如果这不是一个选项,这里是一个"外科"解决方案:你需要编辑
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsqueryregistry.bat"
Run Code Online (Sandbox Code Playgroud)
(当然首先备份)
1.查找以下两个标签:
:GetWindowsSdkDirHelper32
:GetWindowsSdkDirHelper64
Run Code Online (Sandbox Code Playgroud)
在每个下面,您将找到以下行:
@REM Get windows 10 sdk version number
@if not "%WindowsSdkDir%"=="" @FOR /F "delims=" %%i IN ('dir "%WindowsSdkDir%include\" /b /ad-h /on') DO @set WindowsSDKVersion=%%i\
Run Code Online (Sandbox Code Playgroud)
将其更改为:
@REM Get windows 10 sdk version number
@if not "%WindowsSdkDir%"=="" @FOR /F "delims=" %%i IN ('dir "%WindowsSdkDir%include\" /b /ad-h /on') DO (
@if not "%%i"=="wdf" (
@set WindowsSDKVersion=%%i\
)
)
Run Code Online (Sandbox Code Playgroud)
2.查找以下两个标签:
:GetUniversalCRTSdkDirHelper32
:GetUniversalCRTSdkDirHelper64
Run Code Online (Sandbox Code Playgroud)
在每个下面,更改以下行:
@FOR /F "delims=" %%i IN ('dir "%UniversalCRTSdkDir%include\" /b /ad-h /on') DO @SET UCRTVersion=%%i
Run Code Online (Sandbox Code Playgroud)
至:
@FOR /F "delims=" %%i IN ('dir "%UniversalCRTSdkDir%include\" /b /ad-h /on') DO (
@if not "%%i"=="wdf" (
@SET UCRTVersion=%%i
)
)
Run Code Online (Sandbox Code Playgroud)
而已.如果有帮助,请告诉我.
请记住,这将wdf完全跳过目录.如果WDK命令提示符设置脚本碰巧使用相同的vcvarsqueryregistry.bat批处理文件(我怀疑它,但是......),那么它们将不再正常工作; 在这种情况下,需要更多的黑客攻击来为每个构建环境选择合适的批处理文件.
| 归档时间: |
|
| 查看次数: |
7298 次 |
| 最近记录: |