We have a library that depends on various third-party libraries. These dependencies are generally found using find_package
in the project’s main CMake file.
To avoid having to write these dependencies twice, in the main CMake file and the project’s -config.cmake file, I have separated these find_package()
calls in a separate ExternalDependencies.cmake
file that contains all find_package()
calls. This file is installed and included both from the project’s CMake file and from the -config.cmake
file.
Now I would like to call find_package()
for these external dependencies when building the library itself, but in case the library is found is a dependency of some other CMake project, find_dependency()
should be used. What is the recommended approach to determine which version of the two to use?
FWIW, this is the current approach I am using from within ExternalDependencies.cmake
; it is quite ugly:
if(PROJECT_NAME STREQUAL "MyLib")
macro(_find_package)
find_package(${ARGN})
endmacro()
else()
include(CMakeFindDependencyMacro)
macro(_find_package)
find_dependency(${ARGN})
endmacro()
endif()
_find_package(...)
Finally, for some of the external dependencies, find modules are not available, and we have to resort to pkg_check_modules()
. I assume there is no find_dependency()
-like approach for pkg_check_modules()
to be used from config files?