通常,当开发人员在我们公司的计算机上本地编译某个混合的C ++ / C#解决方案时,他们会使用.vssettings配置文件。此配置文件中包含的内容之一是引用Lib和Include文件的各种目录路径。
但是,我们的buildAgent机器(使用TeamCity)设置为无菌,并且在构建任何给定的解决方案/项目时需要安装最少的机器。这意味着上面的exampled混合C ++ / C#项目无法访问IDE的配置,其中包括搜索路径等设置。 TC通过允许您为任何给定的buildConfiguration(甚至是buildAgent)设置各种变量来解释这个....
但是如何在TC中获得包含WORK的搜索路径?我正在从源代码控制(Perforce)中复制一份我想要包含的副本(1),然后尝试定义一个环境变量(2) - 然而TC未通过构建(3)。
我确定我的配置错了,但是我的生活无法弄清楚是什么!
非常感谢任何帮助,
blong
(1)VSC客户端映射 - Perforce
// depot / OpenSource / Boost-1.33.0 / boost / ... // team-city-agent / OpenSource / boost /...
(2)buildConfig环境变量定义
env.Include =%system.teamcity.build.checkoutDir%\ OpenSource
(3)TC build log snippet
[16:57:39]:[Project“xxx.sln”(Build target(s)):] e:\ buildagent \ work \ ef1853a454da9d94 \ xxx \ rowsbase.cpp(5,0):error C1083:无法打开包含文件:'boost / dynamic_bitset.hpp':没有这样的文件或目录
答案 0 :(得分:4)
首先,您应该尝试在命令行上使用msbuild或vcbuild自行编译解决方案,因为TeamCity将执行类似的操作。如有必要,将msbuild文件夹添加到Path系统变量中。然后打开命令行并输入:
msbuild.exe YourSolution.sln
或
msbuild.exe YourSolution.sln / p:Configuration = Release
取决于您是否要在调试或发布模式下执行此操作。这应该会产生相同的C1083错误。
以下是修复:
添加您需要添加环境变量(实际上是系统变量)的目录路径,我建议您调用INCLUDE。
在文件夹中打开文件VCProjectEngine.dll.config.xml ... / Microsoft Visual Studio 9.0 / VC / vcpackages /.
将INCLUDE系统变量添加到包含行。对我来说,它取代了: 包括= “$(VCInstallDir)包括; $(VCInstallDir)atlmfc \包括; $(WindowsSdkDir)\包括; $(FrameworkSDKDir)包括”
使用: 包括= “$(VCInstallDir)包括; $(VCInstallDir)atlmfc \包括; $(WindowsSdkDir)\包括; $(FrameworkSDKDir)包括; $(包含)”
测试工作原理:打开一个新命令行(需要在更改环境变量后将其考虑在内)并尝试构建解决方案,如上所示。这对我来说是有用的,可以用#include。
现在我们也可以在TeamCity中使用它。此时你可以运行一个TC版本来查看它是否存在,但它不适合我。转到TC构建配置的“属性和环境变量”,并添加一个名为INCLUDE的环境变量,其值与上面的INCLUDE系统变量中的路径相同。
现在这应该有效。希望它有所帮助。
答案 1 :(得分:1)
答案 2 :(得分:0)
我遇到了一个问题,我的C ++项目是在构建代理上的Visual Studio中构建的,但是在通过TC构建时它们失败了。构建代理正在运行Windows,代理正在作为服务运行(TeamCity构建代理服务)。问题是该服务是作为“本地系统”而不是配置Visual Studio的用户运行的。我更改服务,因此它将作为“构建”用户登录,一切正常。