[CMake] making two targets with similar names
Juan Sanchez
Juan.Sanchez at amd.com
Fri Aug 10 15:01:36 EDT 2007
Hi Bill,
What's the proper syntax? Setting the variable in CMakeLists.txt doesn't
work. Neither does setting it in my initial Cache file (loaded with
cmake -C).
SET (CLEAN_DIRECT_OUTPUT 1 CACHE STRING "1")
Thanks,
Juan
Bill Hoffman wrote:
> Juan Sanchez wrote:
>> I am having the following issue. I want to create both a libFOO.a and a
>> libFOO.so. Note that the libFOO.so is composed of more sources than the
>> libFOO.a.
>>
>> I use OUTPUT_NAME in order so they have the same name. I can make the
>> FOOSTATIC, libFOO.a, target, just fine. However, making the FOODYNAMIC,
>> libFOO.so, target deletes libFOO.a, just before linking against it.
>> This causes a build error.
>>
>> Is there anyway to prevent this from happening?
>>
>>
>> ADD_LIBRARY (FOOSTATIC STATIC ${UDB_SRCS})
>> ADD_LIBRARY (FOODYNAMIC SHARED ${PERL_SRCS})
>>
>> target_link_libraries(FOODYNAMIC FOOSTATIC)
>>
>> SET_TARGET_PROPERTIES(FOODYNAMIC PROPERTIES
>> LINK_FLAGS --whole-archive
>> OUTPUT_NAME FOO
>> )
>>
>> SET_TARGET_PROPERTIES(FOOSTATIC PROPERTIES
>> OUTPUT_NAME FOO
>> )
>>
> See the documentation for OUTPUT_NAME:
>
> When a library is built CMake by default generates code to remove any
> existing library using all possible names. This is needed to support
> libraries that switch between STATIC and SHARED by a user option.
> However when using OUTPUT_NAME to build a static and shared library of
> the same name using different logical target names the two targets will
> remove each other's files. This can be prevented by setting the
> CLEAN_DIRECT_OUTPUT property to 1.
>
>
> -Bill
>
>
>
--
Juan Sanchez
Juan.Sanchez at amd.com
800-538-8450 Ext. 54395
512-602-4395
More information about the CMake
mailing list