Файл CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project(demolib C)
add_library(demolib SHARED demolib.c demolib.h)
if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
set(LIB_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/lib/)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
set(LIB_INSTALL_PATH /usr/lib/)
endif()
install(TARGETS demolib DESTINATION ${LIB_INSTALL_PATH})
find_path(LIB_INCLUDE_PATH string.h)
install(FILES demolib.h DESTINATION ${LIB_INCLUDE_PATH})
Самой полезной из этих команд является команда install().
У команды install() три группы аргументов:
- спецификатор, определяющий, что именно мы устанавливаем,
- список имен устанавливаемых объектов
- целевая директория.
Команда install(), вызванная со спецификатором TARGETS, устанавливает файлы, являющиеся целями (то есть, результатом) сборки. В качестве аргументов мы передаем команде имя цели сборки и директорию, в которую должны быть установлены целевые файлы. Для того чтобы сгенерировать инструкции установки файла, не являющегося целью сборки (например, файла demolib.h), мы вызываем команду install() со спецификатором FILES. У команды install() есть и другие опции, можно, например, указать, какую из конфигураций сборки (RELEASE, DEBUG и т.д.) следует использовать для установки (если вы думаете, что никому не понадобится устанавливать проект, собранный в отладочной конфигурации, то ошибаетесь, - многие библиотеки, модули расширения, да и программы можно отлаживать только после полной установки).
В команде install() можно также указывать разрешения для устанавливаемого файла.
Спецификатор SCRIPTS команды install() позволяет выполнять сценарии CMake до и после установки файлов. Это может оказаться полезным в тех случаях, когда для корректной установки необходимо не только скопировать файл, но и выполнить некоторые дополнительные действия – запустить утилиты, настроить файлы конфигурации, добавить записи в реестр (ой, о чем это я?)...