Я добавил zlib
в проект CMake так:
project(zlib)
include(ExternalProject)
# set some variables
ExternalProject_Add(zlib_proj # boring stuff omitted ...
)
add_library(zlib SHARED IMPORTED GLOBAL)
add_dependencies(zlib zlib_proj)
set_target_properties(zlib PROPERTIES
# ...
INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIR}"
)
Я решил построить zlib
в своем проекте CMake вместо использования системы zlib.so
, чтобы гарантировать, что один и тот же zlib
используется независимо от того, где проект клонирован и собран (этот выбор не для обсуждения).
В другом месте, другая цель связывается с zlib
до target_link_libraries
. В исходном файле в этой зависимой цели я #include <zlib.h>
. Он прекрасно компилируется, и я вполне уверен, что zlib.so
также правильно собран и связан. Тем не менее, <zlib.h>
также доступна из системы. Возможно, я мог бы вручную проверить, что я включаю <zlib.h>
в ${INCLUDE_DIR}
, добавив фиктивную переменную и используя ее в зависимом исходном файле, но я действительно хотел бы автоматически утверждать, что правильный файл включен во время любой компиляции на любом машина. Определения того, что включенный zlib.h
живет где-то в каталоге сборки CMake, вероятно, достаточно.
Я думаю, CheckIncludeFileCXX
не совсем решает проблему; Мне нужно проверить, какой zlib.h
на самом деле включен в конкретный исходный файл. Знание того, что мои локальные данные zlib.h
могут быть включены вообще, безусловно, является обязательным условием, но это не полностью отвечает на мой вопрос.