[CMake] How to avoid the explicit library location when linking with imported library targets

Pere Mato Vila Pere.Mato at cern.ch
Fri Sep 17 07:19:39 EDT 2010


Hi,

   I am using the nice feature of exporting targets from one CMake project to another. This works really nicely since it avoids explicitly linking my executables and shared libraries with the dependent libraries of the imported library target. The problem is that imported library is linked with its full installation path using the value of property IMPORTED_LOCATION, which is generated when installing the exports. This implies that I cannot relocate the installation of the project that is exporting the targets. Is there a way to tell CMake to use only the library name for the imported library targets? 

  In other words and with a little example

add_library(bar SHARED IMPORTED)
set_property(TARGET bar APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
set_target_properties( bar PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_NOCONFIG "A;B;C"
  IMPORTED_LOCATION_NOCONFIG "/tmp/absolute/path/to/libbar.so"
  IMPORTED_SONAME_NOCONFIG "libbar.so"
)
add_library(foo SHARED foo.cxx)
target_link_libraries(foo bar)

this gives the following link statement

Linking CXX shared library libfoo.so
/afs/cern.ch/sw/lcg/external/CMake/2.6.4/x86_64-slc5-gcc43-opt/bin/cmake -E cmake_link_script CMakeFiles/foo.dir/link.txt --verbose=1
/usr/bin/c++  -fPIC   -shared -Wl,-soname,libfoo.so -o libfoo.so CMakeFiles/foo.dir/foo.o -L/tmp/absolute/path/to /tmp/absolute/path/to/libbar.so -lA -lB -lC -Wl,-rpath,/tmp/absolute/path/to

The question is how can I tell CMake to produce -lbar instead of /tmp/absolute/path/to/libbar.so?

I am using CMake version 2.6-patch 4.

-------------------------------------------------------------
Pere Mato  CERN, PH Department, CH 1211 Geneva 23, Switzerland
          e-mail: pere.mato at cern.ch      tel: +41 22 76 78696
          fax:  +41 22 76 68792            gsm: +41 76 48 70855




More information about the CMake mailing list