Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use includes of adjacent subproject in cmake

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?

like image 584
paceholder Avatar asked Jan 29 '14 19:01

paceholder


2 Answers

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.

like image 125
steveire Avatar answered Oct 16 '22 00:10

steveire


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

like image 27
paceholder Avatar answered Oct 15 '22 23:10

paceholder