2015-08-13 4 views
20

In CMake geben die Befehle target_include_directories(), target_compile_definitions() und target_compile_options() die Build-Spezifikationen und die Verwendungsvoraussetzungen für binäre Ziele an.Welche INTERFACE, PUBLIC, PRIVATE bedeuten in cmake Ziel Kompilierungseinstellung?

Jeder der Befehle hat einen PRIVATE-, PUBLIC- und INTERFACE-Modus. Es fällt mir jedoch schwer, den Unterschied zwischen ihnen zu verstehen. Mein Verständnis ist die oben genannten drei Befehle werden verwendet, um Compiler-Umgebung für ein bestimmtes Ziel zu setzen. Was unterscheidet die Einstellung zwischen PRIVATE, PUBLIC und INTERFACE?

Antwort

33

Diese Modi sind nützlich, wenn Sie ein Ziel haben, das wiederverwendet werden soll (normalerweise eine Bibliothek). PRIVATE Definitionen gelten nur für das Bibliotheksziel, nicht jedoch für andere Ziele, die diese Bibliothek verwenden. INTERFACE Definitionen gelten nur für abhängige Ziele, nicht jedoch für die Bibliothek selbst. PUBLIC Definitionen gelten sowohl für das Bibliotheksziel als auch für die abhängigen Ziele.

Beispiel:

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 
Verwandte Themen