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