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という名前を付けます。
問題は、私のCMakeLists.txt (実際には私のCTestConfig.cmake ) ファイルには次のグローバル プロパティ設定がありますが (私が入れようとした両方のファイルにあります):SubProject
Labels
Sites
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.: 私がこれやあれをする理由を私に尋ねるのは控えてください (関連する指摘がある場合を除きます)。この場所を公開するのに適していないのには十分な理由があります。私はあなたの親切な助けを求めるためにここに来ました.回答)。