Question

I develop a project which consisting of several shared libraries and build it with CMake. Each library is built via add_subdirectory().

What is the best way to add all the API headers of the fist library to the CMakeLists.txt of the second?

Was it helpful?

Solution

Encode the include directories in the target itself:

http://www.cmake.org/cmake/help/git-master/manual/cmake-buildsystem.7.html#include-directories-and-usage-requirements

That doc is new, but the target_include_directories command exists since CMake 2.8.11. Use it with the INTERFACE or PUBLIC option.

OTHER TIPS

To make an answer of steveire complete:

for the library which exports API we should write

target_include_directories("target_with_api" INTERFACE "path_to_api_includes")

and for the library which uses this API we write

target_include_directories("api_client_target_name" PRIVATE
             $<TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES>)

where $<TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES>) returns us target property assigned to the library with API

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top