我使用 CMake 构建了一个包含多个独立项目的源代码树来构建每个单独的项目。
重要提示:我没有全局 CMakeLists.txt 文件来执行整个构建,我使用通用脚本(windows (.cmd) 和 unix (.sh))循环所有子项目。我想保持项目的独立性,同时又能够自动构建它们。
另一方面,在 Cdash 中,我希望将所有这些独立项目视为Cdash 子项目,作为更大的独特人工Cdash 项目的一部分。
为了使用 Cdash,我遵循了以下描述的方法: http ://www.cmake.org/Wiki/CMake/Testing_With_CTest
我将此方法命名为 A。
即,我这样做:
enable_testing()
include(CTest)
然后,我自己做一些测试。
之后,我尝试按照以下页面指示将我的个人项目视为子项目: http ://www.kitware.com/media/html/CdashSubprojects.html
我将此方法命名为 B。
问题是提交给 CDash 的 xml 缺少和SubProject
xmlLabels
元素(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 - 当然 - 定义明确。
- 你知道提交的 xml 文件的元素下缺少wjy
SubProject
和元素吗?Labels
Sites
- 方法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 吗?
在此先感谢您的帮助。问候。
P.-S.:请不要问我为什么要这样做或那样(除非你有相关的观点要提出),因为-一-没有帮助,-二-如果我这样做,那是因为我有一个很好的理由,这个地方不适合暴露它。我来这里是为了寻求你的帮助,最好是从知道他/她在说什么的人那里寻求帮助,或者明确的最终结果“不,不可能那样做,因为这个”(因为是强制性的 - 请不要强制答案)。