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 の愚かなコンパイラ探しを満たすためにいくつかの追加のトリックが必要でしたが、それを呼び出すことはしません。本当に満足のいくものではありませんが、うまくいきます。