CTest CDash: XML-элементы SubProject отсутствуют на сайтах с использованием include(CTest) только для отправки результатов теста.

Я построил исходное дерево с несколькими независимыми проектами, используя CMake для создания каждого отдельного проекта.

Важное замечание: У меня нет глобального файла CMakeLists.txt для выполнения всей сборки, я использую общие сценарии (windows (.cmd) и unix (.sh)) для зацикливания всех подпроектов. Я хочу сохранить проекты независимыми и при этом иметь возможность создавать их все автоматически.

В CDash, с другой стороны, я хотел бы видеть все эти независимые проекты как подпроекты CDash как часть более крупного уникального проекта искусственного CDash.

Для работы с CDash я следовал методу, описанному по адресу: http://www.cmake.org/Wiki/CMake/Testing_With_CTest

Я назову этот метод А.

А именно я делаю:

enable_testing()
include(CTest)

А потом поставь несколько собственных тестов.

После этого я попытался следовать указаниям на следующей странице, чтобы мои отдельные проекты рассматривались как подпроекты: http://www.kitware.com/media/html/CDashSubprojects.html

Я назову этот метод Б.

Проблема в том, что в XML, который находится на CDash, отсутствует SubProject а также Labels элементы xml (теги для нарушителей xml), Sites, хотя мой файл CMakeLists.txt (на самом деле мой CTestConfig.cmake) имеет следующие глобальные настройки свойств (я пытался поместить его в оба файла):

set_property(GLOBAL PROPERTY SubProject ${CMAKE_PROJECT_NAME})
set_property(GLOBAL PROPERTY Label ${CMAKE_PROJECT_NAME})

где CMAKE_PROJECT_NAME - конечно, хорошо определено.

  • Вы знаете WJY SubProject а также Labels элементы отсутствуют под Sites элемент переданных файлов XML?
  • Можно ли смешивать методы A и B?

Кроме того, я проверил источник CTest, эти глобальные свойства добавлены этой функцией (я взял его из 2.8.10, не смог загрузить исходный код 2.8.11, который я использую, поэтому я надеюсь, что нет никаких изменений, что в противном случае извините):

//----------------------------------------------------------------------
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";
  }
}
  • Есть ли ch->GetCMake() вернуть NULL как-нибудь в моем случае?

Заранее спасибо за помощь. С уважением.


П.-С.: Пожалуйста, воздержитесь от вопроса, почему я делаю то или иное (если только у вас нет существенных соображений), потому что - одно - это не помогает, - два - если я это делаю, это потому, что я У меня есть веская причина, по которой это место не подходит для разоблачения. Я прихожу сюда, чтобы обратиться к вам за помощью, желательно к кому-то, кто знает, о чем он / она говорит, или к окончательному заключению: "Нет, это невозможно, из-за этого поступайте иначе" (потому что это обязательно - пожалуйста, не безапелляционно) ответы).

0 ответов

Другие вопросы по тегам