我们有一个正在运行的 Team City Build Server,并且想要编译一个 Visual C++ 项目。到目前为止,这很容易,因为我已经使用 Windows SDK 设置了我们的 Windows 构建代理,但我们没有解决方案/项目文件。
项目文件是使用 CMake 创建的。CMake 似乎有点笨(未安装 Visual Studio 时无法生成解决方案),但通过一些技巧,我可以做到这一点。然后可以使用 MSBuild 构建解决方案。
问题来了。为此,我需要调用 Windows SDK 的 SetEnv.cmd。而且我似乎无法自动找到它。在Windows SDK的bin子目录下,但是bin和root都不在路径下,而且%mssdk%
环境变量是SetEnv.cmd设置的,事先不可用!
将 Windows SDK\bin 目录添加到 PATH 会导致 SetEnv.cmd 不再工作(退出并显示The x86 compilers are not currently installed
和Jump target Set_x86 not found
.
开始菜单链接以 Windows SDK 目录作为工作目录调用 SetEnv.cmd。但是如果我将根目录添加到 PATH,Bin\SetEnv.cmd 不可用。
如何自动找到 SetEnv.cmd?即使将环境变量设置为 setenv.cmd 的完整路径也不起作用,并且当我将 %mssdk% 定义为 sdk 目录时,调用 %mssdk%\bin\SetEnv 也不起作用。我还尝试定义 %mssdk%,然后 cd %mssdk%,然后调用 bin\SetEnv。在所有这些情况下也找不到编译器。如果我在命令行上手动 cd 到 root 或 bin 目录,然后调用 SetEnv.cmd,它也不起作用...
不过,开始菜单链接工作正常。
作为记录,我现在的解决方案虽然很奇怪,但如下:
我创建了一个 MSBuild 文件,该文件在命令行上使用 CMake 创建解决方案文件,然后使用 MSBuild 任务调用创建的解决方案。MSBuild 文件可以很容易地从 TeamCity 构建,尽管我需要一些额外的技巧来满足 CMake 愚蠢地寻找编译器,尽管我不会调用它。不是很令人满意,但它确实有效。