On Friday 11 February 2011, Andrea Galeazzi wrote: > Alexander Neundorf ha scritto: > > On Wednesday 09 February 2011, Andrea Galeazzi wrote: > >> Il 08/02/2011 17.58, Alexander Neundorf ha scritto: > >>> On Tuesday 08 February 2011, Andrea Galeazzi wrote: > >>>> Il 18/01/2011 19.17, Alexander Neundorf ha scritto: > >>>>> On Tuesday 18 January 2011, Andrea Galeazzi wrote: > >>>>> ... > >>>>> > >>>>>> I just read that wiki page but what I didn't find is how can I see > >>>>>> the sources referenced by the add_subproject function in the layout > >>>>>> of eclipse project. > >>>>> > >>>>> You mean add_subdirectory(), right ? > >>>>> > >>>>>> In other words, CMake generates an eclipse project with a folder > >>>>>> named [Source directory], containing just only the sources listed in > >>>>>> the CMakeLists.txt but it doesn't allow to see the sources included > >>>>>> by add_subproject. > >>>>> > >>>>> There should be subdirectories there which you should be able to > >>>>> open, which should show the files. > >>>>> > >>>>> Which exact version of cmake are you using ? > >>>>> > >>>>> Alex > >>>>> > >>>>> __________ Informazioni da ESET NOD32 Antivirus, versione del > >>>>> database delle firme digitali 5798 (20110118) __________ > >>>>> > >>>>> Il messaggio و stato controllato da ESET NOD32 Antivirus. > >>>>> > >>>>> www.nod32.it > >>>> > >>>> Yes I meant add_subdirectory and I'm using 2.8.3 version. > >>>> The point is that the path passed as argument to the add_subdirectory > >>>> function isn't necessary a real filesystem subdirectory of the current > >>>> CMakeLists.txt so, in this case, it cannot be browsed by the resource > >>>> view of eclipse. > >>>> To be more specific don't you think it'd better to generate a .project > >>>> containing more links than only [Source directory]? > >>>> i.e.: > >>>> <linkedResources> > >>>> <link> > >>>> <name>[Source directory]</name> > >>>> <type>2</type> > >>>> <location>/Project/Prj</location> > >>>> </link> > >>>> </linkedResources> > >>>> > >>>> vs: > >>>> <linkedResources> > >>>> <link> > >>>> <name>Main Project</name> > >>>> <type>2</type> > >>>> <location>/Project/Prj</location> > >>>> </link> > >>>> <link> > >>>> <name>LibName</name> > >>>> <type>2</type> > >>>> <location>/Libs/Lib1</location> > >>>> </link> > >>>> </linkedResources> > >>>> > >>>> where libName is the name declared in the project() statement of > >>>> CMakeLists.txt of /Libs/Lib1. > >>>> This behavior should be more similar to the Visual Studio generator. > >>>> So far I made a workaround writing a script which parse a > >>>> CMakeLists.txt and invokes CMake to generate one eclipse project for > >>>> each > >>>> add_subdirectory entry. Then I import all projects in a workspace. > >>>> I dislike a such solution but that's the only way to browse all > >>>> sources that I found. > >>>> I hope my suggestion will be taken into account for the next > >>>> releases... and sorry for the late answer! > >>>> Andrea > >>> > >>> I'll have a look. > >>> > >>> Alex > >>> > >>> __________ Informazioni da ESET NOD32 Antivirus, versione del database > >>> delle firme digitali 5841 (20110202) __________ > >>> > >>> Il messaggio و stato controllato da ESET NOD32 Antivirus. > >>> > >>> www.nod32.it > >> > >> I took the liberty to change a piece of code just in order to test the > >> idea above. That's the code modified (in > >> cmExtraEclipseCDT4Generator::CreateProjectFile() ) > > > > Cool :-) > > Without having looked at the code in detail, what I'd like to have is to > > keep the linked resource [SOURCE DIR] pointing to CMAKE_SOURCE_DIR, and > > additionally a linked resource [PROJECTS], which contains linked > > resources pointing to the different project directories. > > This way I hope it should be clear that the one link just takes you to > > the source directory, while the other links (only visible when the > > [PROJECTS] resource is opened) take you to the project directories. > > > > Alex > > > >> if (this->IsOutOfSourceBuild) > >> { > >> fout << "\t<linkedResources>\n"; > >> // create a linked resource to CMAKE_SOURCE_DIR > >> // (this is not done anymore for each project because of > >> // http://public.kitware.com/Bug/view.php?id=9978 and because I > >> found it > >> // actually quite confusing in bigger projects with many directories > >> and > >> // projects, Alex > >> const std::vector<cmLocalGenerator*>& generators = > >> this->GlobalGenerator->GetLocalGenerators(); > >> std::vector<cmLocalGenerator*>::const_iterator iter = > >> generators.begin(); > >> for(; iter != generators.end(); ++iter) > >> { > >> mf = (*iter)->GetMakefile(); > >> std::string sourceLinkedResourceName = "["; > >> sourceLinkedResourceName += mf->GetProjectName(); > >> sourceLinkedResourceName += "]"; > >> std::string linkSourceDirectory = this->GetEclipsePath( > >> > >> mf->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, sourceLinkedResourceName, > >> > >> this->GetEclipsePath(linkSourceDirectory)); > >> this->SrcLinkedResources.push_back(sourceLinkedResourceName); > >> } > >> > >> // for EXECUTABLE_OUTPUT_PATH when not in binary dir > >> this->AppendOutLinkedResource(fout, > >> mf->GetSafeDefinition("CMAKE_RUNTIME_OUTPUT_DIRECTORY"), > >> mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH")); > >> // for LIBRARY_OUTPUT_PATH when not in binary dir > >> this->AppendOutLinkedResource(fout, > >> mf->GetSafeDefinition("CMAKE_LIBRARY_OUTPUT_DIRECTORY"), > >> mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH")); > >> } > >> > >> fout << "\t</linkedResources>\n"; > >> } > >> > >> and it works in my case. Consider this just as a "draft" of a possible > >> patch. Let me know what do you think about it and if I can be of help in > >> anyways. > >> Andrea. > >> _______________________________________________ > >> Powered by www.kitware.com > >> > >> Visit other Kitware open-source projects at > >> http://www.kitware.com/opensource/opensource.html > >> > >> Please keep messages on-topic and check the CMake FAQ at: > >> http://www.cmake.org/Wiki/CMake_FAQ > >> > >> Follow this link to subscribe/unsubscribe: > >> http://www.cmake.org/mailman/listinfo/cmake > > > > _______________________________________________ > > Powered by www.kitware.com > > > > Visit other Kitware open-source projects at > > http://www.kitware.com/opensource/opensource.html > > > > Please keep messages on-topic and check the CMake FAQ at: > > http://www.cmake.org/Wiki/CMake_FAQ > > > > Follow this link to subscribe/unsubscribe: > > http://www.cmake.org/mailman/listinfo/cmake > > I modified the code in order to achieve what you suggested, now CMake > generates two Linked Folders: [Sources Directory] pointing to > CMAKE_SOURCE_DIR and [Dependent Projects] containing all sub projects > specified in add_subdirectory commands. > > const std::vector<cmLocalGenerator*>& generators = > this->GlobalGenerator->GetLocalGenerators(); > std::vector<cmLocalGenerator*>::const_iterator iter = > generators.begin(); > std::string sourceLinkedResourceName; > for(; iter != generators.end(); ++iter) > { > std::string rootLinkDirectory; > mf = (*iter)->GetMakefile(); > if (iter != generators.begin()) > { > rootLinkDirectory = "[Dependent Projects]"; > sourceLinkedResourceName = rootLinkDirectory; > sourceLinkedResourceName += "/"; > sourceLinkedResourceName += mf->GetProjectName(); > } > else > { > sourceLinkedResourceName = "[Sources Directory]"; > rootLinkDirectory = sourceLinkedResourceName; > } > std::string linkSourceDirectory = this->GetEclipsePath( > > mf->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, sourceLinkedResourceName, > > this->GetEclipsePath(linkSourceDirectory)); > if (find (this->SrcLinkedResources.begin(), > this->SrcLinkedResources.end(), > rootLinkDirectory) == this->SrcLinkedResources.end()) > this->SrcLinkedResources.push_back(rootLinkDirectory); > } > > // for EXECUTABLE_OUTPUT_PATH when not in binary dir > this->AppendOutLinkedResource(fout, > mf->GetSafeDefinition("CMAKE_RUNTIME_OUTPUT_DIRECTORY"), > mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH")); > // for LIBRARY_OUTPUT_PATH when not in binary dir > this->AppendOutLinkedResource(fout, > mf->GetSafeDefinition("CMAKE_LIBRARY_OUTPUT_DIRECTORY"), > mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH")); > } > > Please let me know what do you think about it and if this kind of > "patch" could enter in the main repository.
Thanks :-) I implemented something a bit different now. For each project()-call in your project a linked resource will be created. But I think this won't make it into 2.8.4 anymore. Alex _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake