[CMake] Globally Set Target Properties

Michael Hertling mhertling at online.de
Mon Nov 7 19:21:25 EST 2011


On 11/07/2011 05:14 PM, Schuchard, Matthew wrote:
> Thanks for the response.
> 
> Actually, that is what I want to do:
> 
> "> Specifically, I need to remove the prefix "lib" from all statically
>> linked libraries I build."
> 
> Also, I do not have to specify full paths to libraries I link to because of the CMAKE_STATIC_LIBRARY_PREFIX command I had mentioned in the initial message.
> Do you know if is possible to set global properties of targets like I am trying to?

AFAIK, that's not possible, but you might use a tailored version of
ADD_LIBRARY(), e.g. ADD_STATIC_LIBRARY(), that cares about PREFIX:

FUNCTION(ADD_STATIC_LIBARY TARGET)
    ADD_LIBRARY(${TARGET} STATIC ${ARGN})
    SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PREFIX "")
ENDFUNCTION()

You might even overwrite the ADD_LIBRARY() command itself:

FUNCTION(ADD_LIBRARY)
    _ADD_LIBRARY(${ARGN})
    IF(ARGV1 STREQUAL "STATIC")
        SET_TARGET_PROPERTIES(${ARGV0} PROPERTIES PREFIX "")
    ENDIF()
ENDFUNCTION()

If you use the latter, note than one can build a static library without
passing the STATIC flag to ADD_LIBRARY(), refer to BUILD_SHARED_LIBS.
Furthermore, overwriting a CMake built-in function only works once.

'hope that helps.

Regards,

Michael

> From: Schuchard, Matthew
> Sent: Monday, November 07, 2011 11:06 AM
> To: Schuchard, Matthew
> Subject: Globally Set Target Properties
> 
> On 11/07/2011 04:15 PM, Schuchard, Matthew wrote:
>> I am trying to globally set target properties for an entire configuration.
>>
>> Specifically, I need to remove the prefix "lib" from all statically
>> linked libraries I build.
>>
>>
>>
>> I already used CMAKE_STATIC_LIBRARY_PREFIX "" such that all libraries I
>> explicitly link to will not have CMake search for libraries of format
>> "libfoo.a" but rather "foo.a" when I specify "foo."
>>
>>
>>
>> However, I cannot seem to globally specify that all target libraries
>> which are statically linked which I build have the prefix removed.
>>
>>
>>
>> I have tried set_target_properties with Unix wildcards to no avail.
>>
>> I have also tried set_property(GLOBAL PROPERTY PREFIX "") and
>> set_property(TARGET PROPERTY PREFIX "") which were both unsuccessful (or
>> maybe I needed to force the cache, but cache was already an argument in
>> the usage statement providing other functionality so I assumed its
>> normal functionality as an argument was unavailable).
>>
>> Could not find any help on Google either.
>>
>>
>>
>> There is also the possibility this is impossible to do with CMake, so if
>> someone can verify that I would also be appreciative.
>>
> 
> From: Michael Wild themiwi at gmail.com <mailto:cmake%40cmake.org?Subject=Re%3A%20%5BCMake%5D%20Globally%20Set%20Target%20Properties&In-Reply-To=%3C4EB7F7A2.50903%40gmail.com%3E>
> Sent: Monday, November 07, 2011 10:56 AM
> To: Schuchard, Matthew
> Subject: Globally Set Target Properties
> 
> These properties apply to targets *create* by CMake, that's not what you
> want. In your case, simply specify the absolute path to the library
> file. E.g.
> 
> target_link_libraries(bar /usr/lib/foo.a)
> 
> If you want to use find_library to find these libraries, have a look at
> CMAKE_FIND_LIBRARY_PREFIXES.
> 
> HTH
> 
> Michael


More information about the CMake mailing list