Properties CTest CDash:使用include(CTest)仅提交测试结果的站点下缺少子项目xml元素

Properties CTest CDash:使用include(CTest)仅提交测试结果的站点下缺少子项目xml元素,properties,labels,ctest,subproject,cdash,Properties,Labels,Ctest,Subproject,Cdash,我使用CMake构建了一个包含几个独立项目的源代码树,以构建每个单独的项目 重要提示:我没有全局CMakeLists.txt文件来执行整个构建,我使用通用脚本(windows(.cmd)和unix(.sh))在所有子项目上循环。我希望保持项目的独立性,并且能够自动构建它们 另一方面,在CDash中,我希望将所有这些独立项目视为CDash子项目,作为更大的独特人工CDash项目的一部分 为了使用CDash,我遵循以下所述的方法: 我将把这个方法命名为A 也就是说,我: enable_testin

我使用CMake构建了一个包含几个独立项目的源代码树,以构建每个单独的项目

重要提示:我没有全局CMakeLists.txt文件来执行整个构建,我使用通用脚本(windows(.cmd)和unix(.sh))在所有子项目上循环。我希望保持项目的独立性,并且能够自动构建它们

另一方面,在CDash中,我希望将所有这些独立项目视为CDash子项目,作为更大的独特人工CDash项目的一部分

为了使用CDash,我遵循以下所述的方法:

我将把这个方法命名为A

也就是说,我:

enable_testing()
include(CTest)
然后,我自己做了一些测试

之后,我尝试按照以下页面指示将我的单个项目视为子项目:

我将把它命名为方法B

问题是,提交给CDash的xml缺少
子项目
标签
xml元素(xml滥用者标签),
站点
下的xml元素,尽管我的CMakeLists.txt(实际上是我的CTestConfig.cmake)文件具有以下全局属性设置(我尝试将其放入两个文件中):

当然,CMAKE_项目的名称定义得很好

  • 您知道提交的xml文件的
    站点
    元素下缺少wjy
    子项目
    标签
    元素吗?
  • 方法A和B可以混合使用吗?
此外,我检查了CTest源代码,这些全局属性是由该函数添加的(我从2.8.10中获取,无法下载我正在使用的2.8.11的源代码,因此我希望没有更改,否则很抱歉):

//----------------------------------------------------------------------
void cmCTest::AddSiteProperties(std::ostream和ost)
{
cmCTestScriptHandler*ch=
静态_cast(这个->GetHandler(“脚本”);
cmake*cm=ch->GetCMake();
//如果没有CMake,那么这是老式的脚本和道具,如
//无论如何,这是行不通的。
如果(!cm)
{
返回;
}
//当cdash更改为仅使用标签时,此代码应消失
const char*subproject=cm->GetProperty(“subproject”,cmProperty::GLOBAL);
if(子项目)
{
ostr GetCMake()->GetProperty(“子项目标签”,cmProperty::GLOBAL);
如果(标签)
{
ostr GetProperty(“标签”,cmProperty::全局);
如果(标签)
{

ostr方法A只涉及使用include(CTest)创建大量目标,如实验、夜间等。方法B涉及使用cmake代码,如CTest_*命令,如CTest_ustart、CTest_ubuild、CTest_utest、CTest_usubmit等。我根本不使用CTest_*命令,我让自动行为(仅通过包含CTest实现的行为)做它的工作(我希望这样做,因为它是开箱即用的)。在使用msvc9的windows下,实验构建的命令行是例如:
CommandLine=”“C:\ProgramFiles(x86)\cmake2.8\bin\ctest.exe“-C$(OutDir)-D实验性的
;
;如果错误级别1转到:VCReportError”
它不会在CDash中生成子项目更新,而是生成项目更新。
set_property(GLOBAL PROPERTY SubProject ${CMAKE_PROJECT_NAME})
set_property(GLOBAL PROPERTY Label ${CMAKE_PROJECT_NAME})
//----------------------------------------------------------------------
void cmCTest::AddSiteProperties(std::ostream& ostr)
{
  cmCTestScriptHandler* ch =
    static_cast<cmCTestScriptHandler*>(this->GetHandler("script"));
  cmake* cm =  ch->GetCMake();
  // if no CMake then this is the old style script and props like
  // this will not work anyway.
  if(!cm)
  {
    return;
  }
  // This code should go when cdash is changed to use labels only
  const char* subproject = cm->GetProperty("SubProject", cmProperty::GLOBAL);
  if(subproject)
  {
    ostr << "<Subproject name=\"" << subproject << "\">\n";
    const char* labels =
      ch->GetCMake()->GetProperty("SubProjectLabels", cmProperty::GLOBAL);
    if(labels)
    {
      ostr << "  <Labels>\n";
      std::string l = labels;
      std::vector<std::string> args;
      cmSystemTools::ExpandListArgument(l, args);
      for(std::vector<std::string>::iterator i = args.begin();
          i != args.end(); ++i)
      {
        ostr << "    <Label>" << i->c_str() << "</Label>\n";
      }
      ostr << "  </Labels>\n";
    }
    ostr << "</Subproject>\n";
  }

  // This code should stay when cdash only does label based sub-projects
  const char* label = cm->GetProperty("Label", cmProperty::GLOBAL);
  if(label)
  {
    ostr << "<Labels>\n";
    ostr << "  <Label>" << label << "</Label>\n";
    ostr << "</Labels>\n";
  }
}