我使用buildbot安装了一个连续的集成平台,该项目使用cmake生成visual studio 2010解决方案。
出于测试目的,我使用我的windows dev vm for buildslave,cmake die出现了一个奇怪的错误
CMake错误:无法创建命名 生成器“Visual Studio 10”
但是,如果我手动制作cmake,那就可以了。
cmake -G“Visual Studio 10”源
此buildlave的配置:
factoryWin = BuildFactory()
factoryWin.addStep(SVN(svnurl=repo_url, mode='copy', username=svn_user, password=svn_passwd))
factoryWin.addStep(ShellCommand(command=['cmake', '-G"Visual Studio 10"', 'source']))
c['builders'].append(
BuilderConfig(name="runtests-win",
slavenames=["win-slave"],
factory=factoryWin)
你知道吗?
答案 0 :(得分:6)
确保你没有意外使用cygwin的cmake(万一你碰巧安装了cygwin)
这个无法构建VS.
答案 1 :(得分:5)
对于我的情况,我不得不使用环境变量来解决这个问题。然后该命令变为:
factoryWin.addStep(ShellCommand(command=['cmake', '-G%CMAKEGENERATOR%', 'source'],
env={"CMAKEGENERATOR": "\"Visual Studio 10\""}))
我认为这可以阻止扭曲的runprocess来操纵字符串。在我的情况下,我还想设置Visual Studio命令环境,所以我的命令是:
factoryWin.addStep(ShellCommand(command=["c:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin\\vcvars32.bat", "x86",
"&&", "cmake", "-G%CMAKEGENERATOR%", "..\\src"],
env={"CMAKEGENERATOR": "\"Visual Studio 10\""}))
显然,我的构建目录与src目录之间的相对路径不同,但结果是相同的,即cmake生成的Visual Studio解决方案。
答案 2 :(得分:2)
在您的情况下,我认为您的问题是数组应该读取
['cmake', '-G', "Visual Studio 10", 'source']
而不是
['cmake', '-G"Visual Studio 10"', 'source']
您看到的错误中的引号是字符串的一部分,而不是包装器。
答案 3 :(得分:1)
我不认为环境变量答案应该被认为是“最佳”答案。这是一个简单的问题,即不使用正确的字符串格式。
也可以使用此语法。
['cmake', '-GVisual Studio 10', 'source']
我编写了一个继承自ShellCommand的CMakeCommand类,它允许关键字指定生成器和sourceDir。它是一个剥离版本,仅指定生成器和源目录,但它可以扩展为包含CMake标志等。
class CMakeCommand(ShellCommand):
name = "generate"
description = "generating"
descriptionDone = "generate"
generator="Visual Studio 10"
sourceDir = "../"
def __init__( self,
generator="Visual Studio 10",
sourceDir = "../",
**kwargs ):
self.generator = generator
self.sourceDir = sourceDir
# always upcall!
ShellCommand.__init__(self, **kwargs)
self.addFactoryArguments(
generator = generator,
sourceDir = sourceDir,
)
def start(self):
tempCommand = ["cmake", "-G", self.generator ]
# Add any flags here
# tempCommand.append( "-DBUILDNAME=buildbot" )
tempCommand.append( self.sourceDir )
self.setCommand( tempCommand )
return ShellCommand.start( self )
示例步骤用法:
factoryWin.addStep(
CMakeCommand(
generator="Visual Studio 10",
sourceDir = "../SVN_CO", # Top level CMakeLists.txt
workdir="vc100", # where the build tree will be placed. Automatically created.
)
)