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