[CMake] adding same subdirectory multiple times.
Michael Wild
themiwi at gmail.com
Thu Mar 11 03:37:47 EST 2010
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
More information about the CMake
mailing list