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