CMake не может определить набор файлов заголовков, которые должны быть установлены из цели. Это имеет смысл, поскольку цель может содержать как частные, так и публичные заголовочные файлы, но CMake не делает различий между ними. Как следствие, вы должны явно указать заголовочные файлы в команде INSTALL(FILES ...)
:
install(FILES ${MY_HEADER_FILES} DESTINATION include)
Поле PUBLIC_HEADER
, на которое вы наткнулись, связано с механизмом платформы OSX, который сам по себе является червем. Я советую вам избегать этого, если вы на самом деле не хотите развернуть свою библиотеку как .framework
на OSX.
Обратите особое внимание на параметр INCLUDES DESTINATION
для команды INSTALL(TARGET ...)
. Хотя это на самом деле не копирует сами файлы, оно позволяет автоматически добавлять каталог include к импортированной цели, предоставленной сценарием пакета конфигурации. Если вы намереваетесь предоставить своим пользователям скрипт конфигурации пакета (что, вероятно, следует, по крайней мере, если вы ожидаете, что ваши пользователи также будут использовать CMake), вы, вероятно, захотите установить эту опцию.
Поскольку механизм установки в целом довольно сложен, у меня есть мой небольшой проект github , где вы можете наблюдать за всеми элементами в действии.