Encode the include directories in the target itself:
That doc is new, but the target_include_directories command exists since CMake 2.8.11. Use it with the INTERFACE or PUBLIC option.
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?
Solution
Encode the include directories in the target itself:
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