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.