[CMake] Imported libraries and cross platform target names
J. Caleb Wherry
calebwherry at gmail.com
Tue Aug 18 14:55:13 EDT 2015
CMAKE_IMPORT_LIBRARY_PREFIX and CMAKE_IMPORT_LIBRARY_POSTFIX should get you
what you want. Then you just have to have one set property:
SET_PROPERTY(TARGET test PROPERTY IMPORTED_LOCATION
${LIB_D}/${CMAKE_IMPORT_LIBRARY_PREFIX}
timer.${CMAKE_IMPORT_LIBRARY_POSTFIX})
-Caleb
On Tuesday, August 18, 2015, Ette, Anthony (CDS) <
Anthony.R.Ette at controlsdata.com
<javascript:_e(%7B%7D,'cvml','Anthony.R.Ette at controlsdata.com');>> wrote:
> Given that add_library() produces a unique filename per platform (the “actual
> file name of the library built is constructed based on conventions of the
> native platform (such as lib<name>.a or<name>.lib”), how does one add the
> library to the final application without having to deal with the filename
> difference? In other words, I’ve got one library that, by default,
> produces ‘libtest.a’ on Linux and ‘test.lib’ on Windows. How can I add
> this imported library into the final application in a cross platform
> manner? I know I can specify two different imported locations (see below),
> but it seems odd to me that Cmake – the cross-platform build env generator
> – doesn’t have a better native way of dealing with this….
>
>
>
> The snippet below will work, but just seems wrong given the nature of what
> CMake is intended to do…is there a better way that I’m missing?! If not,
> can I request that a future release of Cmake handle platform naming
> convention difference internally when invoking ADD_LIBRARY with the
> IMPORTED tag set? Ok so, to be fair, Cmake can be used to cross compile
> and that certainly complicates my feature request but, when not cross
> compiling, CMake knows what platform it’s being executed on so it should be
> able to resolve static archive platform decorations internally.
>
>
>
> ADD_LIBRARY(test STATIC IMPORTED)
>
> if(WIN32)
>
> SET_PROPERTY(TARGET test PROPERTY IMPORTED_LOCATION ${LIB_D}/timer.lib)
>
> endif()
>
> if(UNIX)
>
> SET_PROPERTY(TARGET test PROPERTY IMPORTED_LOCATION
> ${LIB_D}/libtimer.a)
>
> endif()
>
>
>
> Thanks in advance,
>
>
> *Anthony Ette *Control Systems Engineer
>
>
>
> Rolls-Royce Controls and Data Services
>
> 7661 N Perimeter Rd
>
> Indianapolis, IN 46241
>
> tel: +1 (317) 230-6943
>
> mob: +1 (317) 864-7975
>
> email: Anthony.R.Ette at controlsdata.com
>
>
> This e-mail (including attachments) contains contents owned by Rolls-Royce
> plc and its subsidiaries, affiliated companies or customers and covered by
> the laws of England and Wales, Brazil, US, or Canada (federal, state or
> provincial). The information contained in this email is intended to be
> confidential, may be legally privileged and subject to export controls
> which may restrict the access to and transfer of the information. If you
> are not the intended recipient, you are hereby notified that any retention,
> dissemination, distribution, interception or copying of this communication
> is strictly prohibited and may subject you to further legal action. Reply
> to the sender if you received this email by accident, and then delete the
> email and any attachments.
>
--
Sent from my iPhone 4s
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150818/35ff2bbb/attachment.html>
More information about the CMake
mailing list