[CMake] add_subdirectory and eclipse project
Alexander Neundorf
a.neundorf-work at gmx.net
Wed Feb 9 11:41:54 EST 2011
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
More information about the CMake
mailing list