2015-08-13 19 views
20

CMake'de target_include_directories(), target_compile_definitions() ve target_compile_options() komutları, ikili belirtimlerin yapı özelliklerini ve kullanım gereksinimlerini belirtir.Cmake hedef derleme ortamında INTERFACE, PUBLIC, PRIVATE ne anlama geliyor?

Her komutun ÖZEL, KAMU ve INTERFACE modu vardır. Ancak aralarındaki farkı anlamakta zorlanıyorum. Anladığım kadarıyla, yukarıdaki üç komut, belirli bir hedef için derleyici ortamını ayarlamak için kullanılır. Öyleyse, bu ayarı PRIVATE, PUBLIC ve INTERFACE modları arasındaki fark nedir?

cevap

33

Bu modlar, yeniden kullanılması amaçlanan bir hedefiniz varsa (genellikle bir kitaplık) yararlıdır. PRIVATE tanımları yalnızca kitaplık hedefi için geçerlidir, ancak bu kitaplığı kullanan diğer hedeflere uygulanmaz. INTERFACE tanımları yalnızca ilgili hedeflere uygulanır, ancak kitaplığın kendisine uygulanmaz. PUBLIC tanımları, hem kütüphane hedefine hem de bağlı hedeflere uygulanır.

Örnek:

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