cmake-boun...@cmake.org wrote on 11.03.2010 10:56:42:
> > On 11. Mar, 2010, at 9:41 , mika.raj...@patria.fi wrote: > > > > > > > cmake-boun...@cmake.org wrote on 11.03.2010 10:37:47: > > > >> > >> On 11. Mar, 2010, at 9:27 , mika.raj...@patria.fi wrote: > >> > >>> > >>> > >>> cmake-boun...@cmake.org wrote on 11.03.2010 10:04:42: > >>> > >>>> On 11.03.10 09:56:35, mika.raj...@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. > > Hu? What do you mean by "variable"? The > > if(TARGET LibraryA) > > code checks whether there exists a target called LibraryA (either through > ADD_LIBRARY, ADD_EXECUTABLE or ADD_CUSTOM_TARGET). No variable involved, > just the target name. I was thinking like this: > > if(NOT TARGET LibraryA) > add_subdirectory(LibraryA) > endif() > > 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 Thanks, this was exactly what i was looking for. I tried if(NOT LibraryA) but i didn't work... i should have read the documentation more carefully.. After that i moved onto making a "variable" set(LibAHandled "TRUE" CACHE INTERNAL "") but the problem with that was that it was a bit too persistant. Works perfectly now, thanks for the replies. -mika _______________________________________________ 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