Добавление настроек к отдельным файлам в CMake

CMake поддерживает следующие команды для добавления настроек к цели:

  • target_compile_definitions — добавляет определения,
  • target_compile_options — добавляет опции компилятора,
  • target_include_directories — добавляет пути поиска заголовочных файлов,
  • target_link_libraries — добавляет линкуемые библиотеки.

Эти команды принимают имя цели в качестве первого аргумента. Цели создаются командами add_executable и add_library. Для add_executable целью является исполняемый файл, а для add_library — библиотека (статическая или динамическая).

CMake поддерживает следующие команды для добавления глобальных настроек:

  • add_compile_definitions — добавляет определения,
  • add_compile_options — добавляет опции компилятора,
  • include_directories — добавляет пути поиска заголовочных файлов.
  • link_libraries — добавляет линкуемые библиотеки.

Эти настройки применяются к целям в текущей папке и всех вложенных папках.

Команды для настройки целей и глобальные команды очень похожи, но имеют разную область видимости. К сожалению, нет аналогичных команд для настройки исходных файлов.

Чтобы добавить настройки к исходному файлу, можно воспользоваться командой set_property или set_source_files_properties. Пример использования:

set_property(SOURCE LibPQExt.cpp PROPERTY INCLUDE_DIRECTORIES
    ${CMAKE_SOURCE_DIR}/libs/postgresql-9.6/src/include
)

set_property позволяет добавлять настройки для нескольких исходных файлов одновременно.

Более удобный способ — создать из исходного файла или их набора специальную цель, которая называется объектной библиотекой.

Синтаксис команды для создания объектных библиотек:

add_library(<name> OBJECT <src>...)

К такой цели можно применять команды с префиксом target_. Например, можно добавить определение LOGGER_TYPE=3 только для файла logger.cpp. Делается это следующим образом

add_library(logger OBJECT logger.cpp)
target_compile_definitions(logger PUBLIC LOGGER_TYPE=3)

Объектную библиотеку можно добавить к другим целям как набор исходных файлов. Для этого в команды add_executable или add_library надо добавить выражение $<TARGET_OBJECTS:objlib>, где objlib — имя объектной библиотеки. Например:

add_library(logger OBJECT logger.cpp)
target_compile_definitions(logger PUBLIC LOGGER_TYPE=3)

add_executable(my_application
    main.cpp
    archiver.cpp
    $<TARGET_OBJECTS:logger>
)

Поддержка объектных библиотек была введена в CMake версии 2.8.8 (апрель 2012 года). При использовании объектных библиотек рекомендуется в файле CMakeLists.txt ограничить версию CMake на уровне 2.8.8 или выше:

cmake_minimum_required(VERSION 2.8.8)
Реклама

Автор

Дмитрий Бравиков

Инженер. Электронщик. Программист.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s