1

私はbuildbotを使用して継続的な統合プレートフォームをマウントします。プロジェクトでは、cmakeを使用してVisualStudio2010ソリューションを生成します。

テスト目的で、ビルドスレーブにWindows dev vmを使用し、cmakeが奇妙なエラーで死ぬ

CMakeエラー:名前付きジェネレーター「VisualStudio10」を作成できませんでした

しかし、私が手動でcmakeを実行する場合、それは正常に機能します

cmake-G「VisualStudio10」ソース

このビルドスレーブの構成:

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

4 に答える 4

6

誤ってcygwinのcmakeを使用していないことを確認してください(cygwinをインストールした場合に備えて)

これはVSを構築できません。

于 2011-02-06T02:01:52.233 に答える
5

私の状況では、環境変数を使用してこの問題を解決する必要がありました。コマンドは次のようになります。

factoryWin.addStep(ShellCommand(command=['cmake', '-G%CMAKEGENERATOR%', 'source'],
     env={"CMAKEGENERATOR": "\"Visual Studio 10\""}))

これにより、ツイスト実行プロセスによる文字列の操作が停止すると思います。私の場合、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によって生成されたVisualStudioソリューションです。

于 2012-10-10T02:34:32.107 に答える
2

あなたの場合、私はあなたの問題は配列が読むべきであるということだと思います

['cmake', '-G', "Visual Studio 10", 'source']

それよりも

['cmake', '-G"Visual Studio 10"', 'source']

表示されているエラーの引用符は文字列の一部であり、ラッパーではありません。

于 2012-08-10T14:55:19.550 に答える
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.
    )
)
于 2013-10-15T16:10:18.367 に答える