I'm trying to specify correctly the dependencies in the MyLibConfig.cmake file of my project.
In CMakeLists.txt I have something like this:
find_package(aLib REQUIRED)
find_package(bLib)
So in MyLibConfig.cmake I wrote something like:
include(CMakeFindDependencyMacro)
find_dependency(aLib REQUIRED)
find_dependency(bLib)
Now, when I write another project that needs myLib, I do:
find_package(MyLib REQUIRED)
This fails because the MyLib configuration file doesn't find bLib, but I would like it to be treated as optional. What is the best Modern CMake practice to handle this?
find_dependency is used only for (initially) REQUIRED packages.
find_package for non-REQUIRED sub-package remains the same when "copied" into XXXConfig.cmake script.
For CMakeLists.txt contained
find_package(aLib REQUIRED)
find_package(bLib)
corresponded content of MyLibConfig.cmake would be:
include(CMakeFindDependencyMacro)
# for REQUIRED package 'find_package' is replaced with 'find_dependency',
# but 'REQUIRED' keyword is omited.
find_dependency(aLib)
# for non-REQUIRED package 'find_package' remains.
find_package(bLib)
It is important that REQUIRED keyword is NOT passed to the find_dependency macro.
So, would one call
find_package(MyLib) # Without 'REQUIRED'!
and aLib package would be missed, then with (failed) call
find_dependency(aLib)
CMake would treat MyLib to be missed too (and would print an appropriate message), but won't stop the configuration because of that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With