[CMake] Eclipse CDT 4 Generator crashes reproducable in case of out-of-source-builds
Thomas Veith
veith.th at googlemail.com
Thu Sep 25 08:03:46 EDT 2008
Hi *,
with cmake 2.6.1 using the Eclipse CDT Generator I get reproducable crashes:
std::string outputPath = mf->GetDefinition("EXECUTABLE_OUTPUT_PATH");
in the function void cmExtraEclipseCDT4Generator::CreateProjectFile():
...
// TODO: refactor this
// create linked resources
if (this->IsOutOfSourceBuild)
{
fout << "\t<linkedResources>\n";
// for each sub project create a linked resource to the source dir
// - only if it is an out-of-source build
for (std::map<cmStdString, std::vector<cmLocalGenerator*> >::const_iterator
it = this->GlobalGenerator->GetProjectMap().begin();
it != this->GlobalGenerator->GetProjectMap().end();
++it)
{
std::string linkSourceDirectory = this->GetEclipsePath(
it->second[0]->GetMakefile()->GetStartDirectory());
// .project dir can't be subdir of a linked resource dir
if (!cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(),
linkSourceDirectory.c_str()))
{
this->AppendLinkedResource(fout, it->first,
this->GetEclipsePath(linkSourceDirectory));
this->SrcLinkedResources.push_back(it->first);
}
}
// for EXECUTABLE_OUTPUT_PATH when not in binary dir
>>>>>>
std::string outputPath = mf->GetDefinition("EXECUTABLE_OUTPUT_PATH");
>>>>>>
if (!outputPath.empty() && !cmSystemTools::IsSubDirectory(
outputPath.c_str(), this->HomeOutputDirectory.c_str()))
{
std::string name = this->GetPathBasename(outputPath);
// make sure linked resource name is unique
while (this->GlobalGenerator->GetProjectMap().find(name)
!= this->GlobalGenerator->GetProjectMap().end())
{
name += "_";
}
this->AppendLinkedResource(fout, name,
this->GetEclipsePath(outputPath));
this->OutLinkedResources.push_back(name);
}
...
Stacktrace:
msvcp90d.dll!104ed4c3()
[Frames below may be incorrect and/or missing, no symbols loaded for
msvcp90d.dll]
msvcp90d.dll!104ebfbd()
msvcp90d.dll!10488d7c()
msvcp90d.dll!1048816c()
> cmake.exe!cmExtraEclipseCDT4Generator::CreateProjectFile() Line 354 + 0x1c bytes
cmake.exe!cmExtraEclipseCDT4Generator::Generate() Line 100
cmake.exe!cmGlobalGenerator::Generate() Line 893 + 0x1b bytes
cmake.exe!cmGlobalUnixMakefileGenerator3::Generate() Line 143
cmake.exe!cmake::Generate() Line 2325 + 0x1b bytes
cmake.exe!cmake::Run(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args=[4]("\cmake\bin\cmake.exe","-G","Eclipse CDT4 - MinGW
Makefiles","..\inforate\packages"), bool noconfigure=false) Line 2305
+ 0x8 bytes
cmake.exe!do_cmake(int ac=4, char * * av=0x01825a48) Line 481 + 0x1a bytes
cmake.exe!main(int ac=4, char * * av=0x01825a48) Line 294 + 0xd bytes
cmake.exe!__tmainCRTStartup() Line 586 + 0x19 bytes
cmake.exe!mainCRTStartup() Line 403
kernel32.dll!7c816fd7()
Local variables:
+ outputPath "" std::basic_string<char,std::char_traits<char>,std::allocator<char>
>
- this 0x018794e8 {SrcLinkedResources=[1]("INFORATE")
OutLinkedResources=[0]() HomeDirectory="D:/sources/inforate/packages"
...} cmExtraEclipseCDT4Generator * const
+ cmExternalMakefileProjectGenerator {SupportedGlobalGenerators=[3]("NMake
Makefiles","MinGW Makefiles","Unix Makefiles")
GlobalGenerator=0x018796f0 } cmExternalMakefileProjectGenerator
+ SrcLinkedResources [1]("INFORATE") std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > >
OutLinkedResources [0]() std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > >
+ HomeDirectory "D:/sources/inforate/packages" std::basic_string<char,std::char_traits<char>,std::allocator<char>
>
+ HomeOutputDirectory "D:/sources/b2" std::basic_string<char,std::char_traits<char>,std::allocator<char>
>
IsOutOfSourceBuild true bool
GenerateSourceProject false bool
- fout {...} cmGeneratedFileStream
+ cmGeneratedFileStreamBase {Name="D:/sources/b2/.project"
TempName="D:/sources/b2/.project.tmp" CopyIfDifferent=false
...} cmGeneratedFileStreamBase
+ std::basic_ofstream<char,std::char_traits<char>
> {_Filebuffer={...} } std::basic_ofstream<char,std::char_traits<char>
>
+ filename "D:/sources/b2/.project" std::basic_string<char,std::char_traits<char>,std::allocator<char>
>
+ make "C:/mingw/bin/mingw32-make.exe" std::basic_string<char,std::char_traits<char>,std::allocator<char>
>
+ mf 0x018766b0 {Prefix="" AuxSourceDirectories=[0]()
cmStartDirectory="D:/sources/inforate/packages" ...} const cmMakefile
*
Is there a known work-around / patch?
Best regards,
Thomas
More information about the CMake
mailing list