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