首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找Windows的SetEnv.cmd / SetEnv.cmd不能正常工作

如何查找Windows的SetEnv.cmd / SetEnv.cmd不能正常工作
EN

Stack Overflow用户
提问于 2009-05-20 13:27:39
回答 2查看 22.9K关注 0票数 6

我们有一个正在运行,并且希望编译一个VisualC++项目。到目前为止,这很容易,因为我已经用Windows设置了我们的,但是我们没有解决方案/项目文件。

取而代之的是用CMake创建项目文件。CMake似乎有点傻(在未安装Visual时无法生成解决方案),但通过一些技巧,我可以让它这样做。然后可以使用MSBuild构建解决方案。

问题来了。要使它自动工作,我需要调用Windows的SetEnv.cmd。我似乎无法自动找到它。它位于Windows的bin子目录中,但是路径中既没有bin也没有根,%mssdk%环境变量由SetEnv.cmd设置,事先不可用!

将Windows \bin dir添加到路径将导致SetEnv.cmd不再工作(退出时带有像The x86 compilers are not currently installedJump target Set_x86 not found这样的消息。

开始菜单链接正在使用Windows作为工作目录调用SetEnv.cmd。但是,如果我将根目录添加到路径中,则Bin\SetEnv.cmd不可用。

如何自动找到SetEnv.cmd?即使将环境变量设置为setenv.cmd的完整路径也不起作用,而且当我将%mssdk%定义为sdk时,调用%mssdk%\bin\SetEnv也不能工作。我还尝试定义%mssdk%,然后定义cd %mssdk%,然后调用bin\SetEnv。此外,在所有这些情况下都找不到编译器。如果我手动cd到命令行的根或bin dir,然后调用SetEnv.cmd.

不过,“开始”菜单链接运行良好。

为了记录在案,我现在的解决办法--尽管这很奇怪--如下:

我创建了一个MSBuild文件,该文件在命令行上使用CMake创建解决方案文件,然后使用MSBuild任务调用创建的解决方案。MSBuild文件可以很容易地从TeamCity构建,尽管我需要一些额外的技巧来满足CMake寻找编译器的愚蠢需求,尽管我不会调用它。不太满意,但很管用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-04 14:18:51

我的解决方案(设置%WindowsSdkPath%,以便可以在%WindowsSdkPath%Bin\下找到SetEnv.cmd ):

代码语言:javascript
复制
@ECHO OFF

IF "%WindowsSdkVersion%"=="" (
  CALL :SetWindowsSdkVersionHelper HKCU > nul 2>&1
  IF ERRORLEVEL 1 CALL :SetWindowsSdkVersionHelper HKLM > nul 2>&1
  IF ERRORLEVEL 1 GOTO ERROR_NOWSDK
)

CALL :SetWindowsSdkPathHelper > nul 2>&1
IF ERRORLEVEL 1 GOTO ERROR_NOWSDK
GOTO END

:SetWindowsSdkPathHelper
SET WindowsSdkPath=
FOR /F "tokens=1,2*" %%i in ('REG QUERY "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\%WindowsSdkVersion%" /V InstallationFolder') DO (
    IF "%%i"=="InstallationFolder" (
        SET "WindowsSdkPath=%%k"
    )
)
IF "%WindowsSdkPath%"=="" EXIT /B 1
EXIT /B 0

:SetWindowsSdkVersion
CALL :GetWindowsSdkVersionHelper HKCU > nul 2>&1
IF ERRORLEVEL 1 CALL :GetWindowsSdkVersionHelper HKLM > nul 2>&1
IF ERRORLEVEL 1 EXIT /B 1
EXIT /B 0

:SetWindowsSdkVersionHelper
SET WindowsSdkVersion=
FOR /F "tokens=1,2*" %%i in ('REG QUERY "%1\SOFTWARE\Microsoft\Microsoft SDKs\Windows" /V "CurrentVersion"') DO (
    IF "%%i"=="CurrentVersion" (
        SET "WindowsSdkVersion=%%k"
    )
)
IF "%WindowsSdkVersion%"=="" EXIT /B 1
EXIT /B 0

:ERROR_NOWSDK
ECHO The Windows SDK %WindowsSdkVersion% could not be found.
EXIT /B 1

:END

我为此受到SetEnv.cmd本身的启发.

票数 3
EN

Stack Overflow用户

发布于 2011-01-17 15:18:08

麦克回答得好!现在,我想使用我的项目文件运行msbuild。但在我运行SetEnv.Cmd之前-对吗?

所以,我们开始:

代码语言:javascript
复制
run_Macs_code.bat REM see above
call "%WindowsSdkPath%\bin\Setenv.cmd" /Release /x86 /xp
cd E:\client
msbuild client.proj

现在起作用了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/887894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档