[CMake] Finding include directories when importing targets exported via install(EXPORT ...)

Matthew LeRoy MLeRoy at minitab.com
Tue May 15 11:10:18 EDT 2012


Hi again,

I'm working on setting up install(...) commands for a shared library project (call it libA), and I'm using the install(EXPORT ...) signature as has been recommended to me previously to export the shared library target so I can import it in another CMake-based project (call it libB). So far things have been pretty straightforward, but I'm now trying to determine how to deal with the public header files for the project. So, two questions:

1. What's the preferred method for installing public headers? I've seen sparse documentation about a PUBLIC_HEADER target property, but the lack of information I can find about it via Google makes me wonder if it's not considered 'best practice'. Taking a look at the CMake list files for the LLVM project, they seem to be using multiple install(DIRECTORY ...) commands. I'm sure there are multiple ways to do this, so what's recommended?

2. How should libB find the location of the installed headers for libA? With Find* modules (of which I'm using a few, FindBoost being one), there is generally a LibName_INCLUDE_DIRs variable that gets set with the include path that I would add in libB's list file via include_directories(${LibName_INCLUDE_DIRS}). But, since I'm using exported/imported targets instead of a Find* module, there doesn't seem to be any built-in support for 'importing' the headers. I saw something in the release notes for a recent CMake version (2.8, I think?) about something called 'per-target INCLUDE_DIRECTORIES', which sounds promising, but couldn't find much more info about it.

Alright, I lied... a third somewhat-related question:

3) What's the general practice as far as where to install the .cmake file generated by the install(EXPORT ...) command? Should it go in the install location along with the built targets? It seems that the generated .cmake file is intended to replace Find* modules and prevent other projects from having to know the installed location of the exported library... but wouldn't putting the generated .cmake import file in the install location require dependent projects to know where the install location is in order to include the .cmake import file?

Many thanks!
Matt


More information about the CMake mailing list