6

Team City Build Server を実行していて、Visual C++ プロジェクトをコンパイルしたいと考えています。Windows SDK を使用して Windows Build Agent をセットアップしたので、ここまでは簡単ですが、ソリューション/プロジェクト ファイルはありません。

プロジェクト ファイルは、代わりに CMake で作成されます。CMake は少しばかげているようですが (Visual Studio がインストールされていない場合は Solution を生成できません)、いくつかのトリックを使用してそれを行うことができました。その後、MSBuild を使用してソリューションをビルドできます。

そして、ここで問題が発生します。これを自動的に機能させるには、Windows SDK の SetEnv.cmd を呼び出す必要があります。そして、私はそれを自動的に見つけることができないようです。これは Windows SDK の bin サブディレクトリにありますが、bin もルートもパスに含まれておらず、%mssdk%環境変数は SetEnv.cmd によって設定されており、事前に使用することはできません!

Windows SDK\bin ディレクトリを PATH に追加すると、SetEnv.cmd が機能しなくなります (The x86 compilers are not currently installedおよびJump target Set_x86 not found.

スタート メニュー リンクは、代わりに Windows SDK dir を作業ディレクトリとして SetEnv.cmd を呼び出しています。しかし、ルート ディレクトリを PATH に追加すると、Bin\SetEnv.cmd が使用できなくなります。

SetEnv.cmd を自動的に見つけるにはどうすればよいですか? 環境変数を setenv.cmd のフル パスに設定しても機能せず、%mssdk% を sdk dir として定義すると、%mssdk%\bin\SetEnv の呼び出しも機能しません。また、%mssdk% を定義してから、cd %mssdk% を実行してから、bin\SetEnv を呼び出しました。また、これらすべてのケースでコンパイラが見つかりません。コマンドラインでルートまたはbinディレクトリに手動でcdしてからSetEnv.cmdを呼び出しても機能しません...

ただし、スタートメニューのリンクは正常に機能します。

記録のために、今のところ私の解決策は、これは奇妙ですが、次のとおりです。

コマンド ラインで CMake を使用してソリューション ファイルを作成し、作成したソリューションを MSBuild タスクで呼び出す MSBuild ファイルを作成しました。MSBuild ファイルは TeamCity から簡単にビルドできますが、CMake の愚かなコンパイラ探しを満たすためにいくつかの追加のトリックが必要でしたが、それを呼び出すことはしません。本当に満足のいくものではありませんが、うまくいきます。

4

2 に答える 2

3

私の解決策(セット%WindowsSdkPath%、それSetEnv.cmdは下にあります%WindowsSdkPath%Bin\):

@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...

于 2010-06-04T14:18:51.480 に答える
0

マック、いい答えだ!ここで、プロジェクト ファイルで msbuild を実行したいと思います。しかし、SetEnv.Cmd を実行する前に - そうですか?

それで、ここに行きます:

run_Macs_code.bat REM see above
call "%WindowsSdkPath%\bin\Setenv.cmd" /Release /x86 /xp
cd E:\client
msbuild client.proj

今、それは働いています:)

于 2011-01-17T15:18:08.897 に答える