Hello, I am trying to install a third-party library cJSON with CMake’s FetchContent and I managed to do it but I find it strange that the header files are not included in the cjson target. Usually the developer would use target_include_directories on his/her exported target so consumers don’t have to worry about header files, am I right?
I am not an expert with CMake so apologies if my question is stupid.
Here’s an excerpt of my project’s CMakeLists.txt:
project(myproject)
include(FetchContent)
FetchContent_Declare(
cJSON
GIT_REPOSITORY https://github.com/DaveGamble/cJSON
GIT_TAG cb8693b058ba302f4829ec6d03f609ac6f848546 # v1.7.16
)
set(ENABLE_CJSON_TEST OFF CACHE BOOL "cJSON: Build with unit testing" FORCE)
FetchContent_MakeAvailable(cJSON)
// The three lines below would be replaced by a single one `target_link_libraries(${PROJECT_NAME} PUBLIC cjson)`
// if the cJSON project would include the header files as part of the target cjson?
configure_file(${cJSON_SOURCE_DIR}/cJSON.h ${CMAKE_BINARY_DIR}/include/cJSON/cJSON.h)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_BINARY_DIR}/include)
target_link_libraries(${PROJECT_NAME} PUBLIC cjson)
I am wondering if there’s a way that I can compile against cjson without hacking a build-time ${CMAKE_BINARY_DIR}/include/cJSON/cJSON.h file.
Thank you!