2015-08-13 12 views
20

W CMake polecenia target_include_directories(), target_compile_definitions() i target_compile_options() określają specyfikacje kompilacji i wymagania dotyczące użycia obiektów binarnych.Co INTERFACE, PUBLICZNY, PRYWATNY oznacza w ustawieniu kompilacji cmake?

Każde z poleceń ma tryb PRYWATNY, PUBLICZNY i INTERFEJS. Mam jednak trudności ze zrozumieniem różnicy między nimi. Rozumiem, że powyższe trzy polecenia służą do ustawiania środowiska kompilatora dla określonego celu. Czym więc różni się to ustawienie pomiędzy trybem PRYWATNYM, PUBLICZNYM a INTERFEJSEM?

Odpowiedz

33

Te tryby są przydatne, jeśli masz cel, który ma być ponownie użyty (zwykle jest to biblioteka). PRIVATE definicje odnoszą się tylko do celu biblioteki, ale nie do innych obiektów docelowych korzystających z tej biblioteki. INTERFACE Definicje odnoszą się tylko do zależnych celów, ale nie do samej biblioteki. PUBLIC definicje odnoszą się zarówno do celu biblioteki, jak i do celów zależnych.

przykład:

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