buildbot和cmake无法创建vs2010生成器

时间:2011-01-31 15:34:00

标签: windows cmake buildbot

我使用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)
你知道吗?

4 个答案:

答案 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.
    )
)