[CMake] linking: absolute path vs -l<libname>

Alexander Neundorf a.neundorf-work at gmx.net
Mon Aug 31 16:34:34 EDT 2015


On Friday, August 28, 2015 08:23:47 Nico Schlömer wrote:
> Hi everyone,
> 
> I'm curious about when CMake decides to link a library by its absolute path
> and when it links using the `-l*` syntax. I came across this for the very
> simple test problem
> ```
> cmake_minimum_required(VERSION 3.0)
> 
> project(mytest)
> 
> find_package(ZLIB REQUIRED)
> find_package(netCDF REQUIRED)
> 
> add_executable(mytest main.cpp)
> target_link_libraries(
>   mytest
>   ${ZLIB_LIBRARIES}
>   ${netCDF_LIBRARIES}
>   )
> ```
> The resulting link line is
> ```
> /usr/bin/c++       CMakeFiles/mytest.dir/main.cpp.o  -o mytest -rdynamic
> -lz /usr/lib/x86_64-linux-gnu/libnetcdf.so.7.3.0
> ```
> so ZLIB is linked with `-lz`, netCDF with the full absolute path.
> 
> Seems inconsistent? (ZLIB by the way is found through CMake's
> FindZLIB.cmake, netCDF by their own export files.)
> 
> So far, I had been under the impression that `-l*` defeats the purpose of
> CMake a little bit as it asks the linker to search in the system's paths
> for a libz.so, something CMake has already done.
> 
> A little clarification here would be great.

it uses -l if the full path is not know or if the full path is one of the 
system library dirs (like e.g. /usr/lib/ or the, IIRC, $LIBRARY_PATH env.var)

Alex



More information about the CMake mailing list