Let use assume you want to use the foo library, and no FindFoo.cmake for foo-config.cmake exist.
(Because it is not known enough to be in standard CMake modules, or because the foo project does not use CMake as a build system, or for whatever reason)
In anycase, if you do have access, please just use it!
Note that qi_use_lib(foo) does not need a specific foo-config.cmake to work.
It is only necessary that the foo-config.cmake code exports FOO_INCLUDE_DIRS and FOO_LIBRARIES.
Here we assume that the foo library only needs an include directory, and tht the name of the library is the same in debug and in release.
The canonical foo-config.cmake should look like
clean(FOO)
fpath(FOO foo/foo.h)
flib(FOO foo)
export_lib(FOO)
Here we assume that the library is named foo.lib for Visual Studio, libfoo.a or libfoo.so for Linux, or libfoo.a or libfoo.dylib for Mac.
If the foo library is open source, do not hesitate to submit a patch to integrate foo-config.cmake with other qibuild cmake modules.
If not, you can simply add foo-config.cmake inside your project, for instance in src/bar/cmake/modules/foo-config.cmake, and modify src/bar/CMakeLists.txt too look like:
cmake_minimum_required(VERSION 2.8)
project(bar)
include("qibuild.cmake")
list(APPEND CMAKE_FIND_ROOT_PATH
${CMAKE_SOURCE_DIR}/cmake/modules)
qi_create_bin(bar bar.cpp)
qi_use_lib(bar foo)
You could have to handle the case where the library is named libfoo-1.2 on linux
In this case, simply add some calls to flib
flib(FOO foo)
if (UNIX)
flib(FOO foo-1.12)
endif()
If the foo library depends on other libraries, for instance foo-base, foo-client , foo-server, you can use
flib(FOO foo foo-base foo-client foo-server)
Note: here we assume that libfoo.so, libfoo-base.so, libfoo-client.so and libfoo-server.so are part of the same package.
If foo depends on an library from an other package (say spam), you should write a spam-config.cmake and use something like
clean(FOO)
# caliing flib, fpath as usual
qi_set_global(FOO_DEPENDS spam)
export_lib(FOO)
Assuming foo.h is in /usr/local/include/foo/foo.h, you can use either:
fpath(FOO foo/foo.h)
In this case, FOO_INCLUDE_DIRS will equal /usr/local/include, so you will have to use
#include <foo/foo.h>
Or you can use:
fpath(FOO foo.h PATH_SUFFIXES foo)
In this case, FOO_INCLUDE_DIRS will equal usr/local/include/foo, so you will have to use
#include <foo.h>
If the foo library comes with a foo-1.0.pc file, you should use the PkgConfig module from CMake, like this
clean(FOO)
find_package(PkgConfig)
pkg_check_modules(FOO foo-1.0)
export_lib_pkgconfig(FOO)