[CMake] adding same subdirectory multiple times.

Mika.Rajala at patria.fi Mika.Rajala at patria.fi
Thu Mar 11 03:41:01 EST 2010



cmake-bounces at cmake.org wrote on 11.03.2010 10:37:47:

>
> On 11. Mar, 2010, at 9:27 , Mika.Rajala at patria.fi wrote:
>
> >
> >
> > cmake-bounces at cmake.org wrote on 11.03.2010 10:04:42:
> >
> >> On 11.03.10 09:56:35, Mika.Rajala at patria.fi wrote:
> >>>
> >>> Hi
> >>>
> >>> The problem:
> >>>
> >>>> From a shared CMakeLists.txt i get the following error when defining
a
> >>> library target.
> >>> Policy CMP0002 is not set: Logival target names must be globally
> > unique.
> >>>
> >>>
> >>> The situation:
> >>>
> >>> Let's assume i have the following cmake files in the following
folders
> > with
> >>> the svn:externals properties.
> >>>
> >>> C:\project\CMakeLists.txt
> >>> add_subdirectory(ProjectA)
> >>> add_subdirectory(ProjectB)
> >>>
> >>> C:\project\ProjectA   (svn:externals LibraryA <svn_path_to_libA>)
> >>> add_subdirectory(LibraryA)
> >>>
> >>> c:\project\ProjectB    (svn:externals LibraryA <svn_path_to_libA>)
> >>> add_subdirectory(LibraryA)
> >>>
> >>> c:\project\LibraryA
> >>> add_library(LibraryA)
> >>>
> >>> Thoughts:
> >>>
> >>> I don't know if this causes any problem, I tried reading some
> >>> documentations but I couldn't figure it out.
> >>
> >> Yes it does. The library target is defined multiple times, thats not
> >> possible. Each version of "LibraryA/CMakeLists.txt" has to use its own
> >> name for LibraryA if you want that directory layout to work. Target
> >> names must be globally unique as the error message says.
> >>
> >> From a quick glance I see two options:
> >> - drop the externals and let the projects depend on a "LibraryA"
target
> >>  being defined (you need to use the add_subdirectory call for it to
the
> >>  fron then
> >> - find a way to test in LibraryA/CMakeLists.txt wether its under
> >>  ProjectA, ProjectB or project and adjust the target name then.
> >>
> >> Andreas
> >>
> >> --
> >> Questionable day.
> >>
> >> Ask somebody something.
> >> _______________________________________________
> >> 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
> >
> > Thanks.
> >
> > I'd still like to know if there is a way to handle this like including
c++
> > header files
> >
> > Something like
> >
> > if(LibraryA)
> >      message(Already included, doing nothing)
> > else()
> >      <Normal CMakeLists content>
> > endif()
> >
> > -mika
>
> if(TARGET LibraryA)
>   message("Already included, doing nothing")
>   return()
> endif()
> ...
>
>
> You could also use directory properties to set "include-guards".
>
> HTH
>
> Michael
>
>
> _______________________________________________
> 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 tried the variable thing, i worked, kinda..

But how do i reset the variable if the CMakeLists.txt has changed.

Now it's a little too persistent, since changes are not handled.

directory properties? i'll take a look at those. Is there a way to reset
them somehow if the same problem should occur there?

-mika



More information about the CMake mailing list