[CMake] creating a shared and static library of the same name

William A. Hoffman billlist at nycap.rr.com
Mon May 15 09:19:17 EDT 2006


At 08:52 AM 5/15/2006, Michael Biebl wrote:
>On 5/15/06, William A. Hoffman <billlist at nycap.rr.com> wrote:
>>At 06:43 AM 5/15/2006, Michael Biebl wrote:
>>>Hi everybody,
>>>
>>>is it possible to create a shared and static library with the same name?
>>>I tried the folllowing:
>>>
>>>ADD_LIBRARY(foo SHARED foo.c)
>>>
>>>ADD_LIBRARY(foo_static STATIC foo.c)
>>>SET_TARGET_PROPERTIES(foo_static PROPERTIES OUTPUT_NAME foo)
>>>
>>>But if I then add
>>>
>>>ADD_EXECUTABLE(bar bar.c)
>>>TARGET_LINK_LIBRARIES(bar foo)  (I want to link it dynamically against
>>>libfoo.so)
>>
>>
>>What version of cmake are you using?  This is only supported in 2.4 and greater.
>
>I'm currently using 2.4.1 (and I get this error message with 2.4.1)
>but it also has to work with 2.2.

OK, I take it back, this will not work with any version of cmake.
There are several issues.

1. on windows, the static and shared libraries will clobber each other.
The shared library will create foo.dll and foo.lib.  The static library
will create foo.lib.

2. Currently the makefiles remove libfoo.* before linking the target on
unix.   This is because the target type may have been changed from shared
to static, so to be safe all types are removed.  


It is possible to change 2, but not 1.   Even if they were in different directories
1 would still be a problem as you could not link to foo.a anyway.   

-Bill




More information about the CMake mailing list