Подтвердить что ты не робот

Что означает INTERFACE, PUBLIC, PRIVATE в настройке компиляции cmake?

В CMake target_include_directories(), target_compile_definitions() и target_compile_options() задают спецификации сборки и требования к использованию двоичных целей.

Каждая из команд имеет режим PRIVATE, PUBLIC и INTERFACE. Однако мне трудно понять разницу между ними. Мое понимание состоит в том, что вышеупомянутые три команды используются для установки среды компилятора для конкретной цели. Итак, что отличает настройку между режимом PRIVATE, PUBLIC и INTERFACE?

4b9b3361

Ответ 1

Эти режимы полезны, если у вас есть цель, предназначенная для повторного использования (обычно это библиотека). PRIVATE определения применяются только к целевой библиотеке, но не к другим объектам, использующим эту библиотеку. INTERFACE определения применяются только к зависимым объектам, но не к самой библиотеке. Определения PUBLIC применяются как к целевой библиотеке, так и к целевым объектам.

Пример:

add_library(test test.cc)
add_executable(main main.cc)
target_compile_features(test PUBLIC cxx_delegating_constructors)
target_link_libraries(main test)
// "target_compile_features(main cxx_delegating_constructors)" is 
// implicitly set by CMake