[CMake] include library dependencies in static lib for Visual Studio

Pedro Vicente me at pedro-vicente.net
Mon Jan 8 00:35:39 EST 2018


I have a project with a chain of external libraries and some of the 
dependencies depend on each other as options 

meaning 

project uses 

LIB A, 
LIB B

LIB B can use as option LIB C

my project then needs to inquire LIB B to see if LIB C was included (to link 
with LIB C)

I do this like this

message("-- Detecting if HDF5 library ${HDF5_LIBRARY} needs the ZLIB library...")
check_library_exists(${HDF5_LIBRARY} H5Z_DEFLATE "" NEED_ZLIB)

here LIB B = HDF5_LIBRARY
LIB C = the zlib library

this works with no problems in Linux.

However in Visual Studio , this detection only works if I manually set in the 
generated project
the option
"Link Library Dependencies"
to include LIB C (the zlib library)

these lines get added to the generated Visual Studio project

<Lib>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<AdditionalDependencies>I:\nco\cmake\zlib\build\Debug\zlibstaticd.lib;I:\nco\cmake\szip\build\bin\Debug\libszip_D.lib</AdditionalDependencies>
</Lib

Is there a way that I can set this in the CMake script?


these comments show the problem


#HDF5 can be optionally linked with the SZIP library (Science Data Lossless 
Compression Program) and ZLIB
#Symbol to detect in ZLIB can be only H5Z_DEFLATE, a structure only defined in 
H5Zdeflate.c if the filter is enabled
#For SZIP the structure can be only H5Z_SZIP, defined in H5Zszip.c if the 
filter is enabled
#check_library_exists() tries to link a temporary program with these symbols
#On MSVC for this detection to work, the HDF5 library MUST HAVE as additional 
dependencies the ZLIB and SZIP libraries,
#which is not a requirement for the library to build successfully

to reproduce the problem, this is the project

https://github.com/nco/nco/tree/master/cmake

on a windows Win64 developer shell

git clone https://github.com/nco/nco
cd cmake
clone.bat
bld.bat

this will git clone and build dependencies, but there will be linking errors 
because the ZLIB (and SZIP) libraries
were not correctly identified as needed

thanks


----------------------
Pedro Vicente
http://www.space-research.org/
http://pedro-vicente.net/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180108/8dec259e/attachment.html>


More information about the CMake mailing list