Common Conanfile Problems

Header-Only Libraries

There are a few occasional problems to be aware of for header-only libraries. Below we describe some of them along with the special handling needed to deal with them.

CMake

While header-only libraries don’t need to be “built”, many header-only libraries still use CMake to define an install target. In these cases, it’s better to use cmake.install() than manually capture .h files, as sometimes it generates and installs findXXX.cmake files which we want.

Using Conan’s CMake Helper with a header-only library presents a bit of a quandry, because the helper requires a compiler to be defined, and the convention is to remove the compiler setting (along with all other settings) from header-only recipes.

package_id() method

Often times, header-only libraries need to define information in the package_id() method which depends on the conanfile settings of "os", "arch", "compiler", "build_type". However, the convention is to remove all settings from header-only recipes. So, in these cases, your recipe should feature all the normal settings of "os", "arch", "compiler", "build_type", but use the standard self.info.header_only() in the package_id() method. A good example is defined here:

http://docs.conan.io/en/latest/howtos/header_only.html#with-unit-tests

Cygwin Builds on Windows

Set short_paths=True in all recipe’s for libraries which need to be built with Cygwin for Windows. The reason for this is that spaces in some users profile path will cause build of the recipe to fail. Using short_paths=True avoids the problem completely.