2015-08-13 19 views
20

Trong CMake, các lệnh target_include_directories(), target_compile_definitions()target_compile_options() chỉ định đặc tả kỹ thuật xây dựng và các yêu cầu sử dụng của mục tiêu nhị phân.INTERFACE, PUBLIC, PRIVATE có nghĩa là gì trong cài đặt biên dịch đích của cmake?

Mỗi lệnh có chế độ RIÊNG TƯ, CÔNG CỘNG và GIAO DIỆN. Tuy nhiên, tôi có một thời gian khó khăn trong việc hiểu sự khác biệt giữa chúng. Sự hiểu biết của tôi là ba lệnh trên được sử dụng để thiết lập môi trường trình biên dịch cho một mục tiêu cụ thể. Vì vậy, những gì làm cho các thiết lập khác nhau giữa một chế độ PRIVATE, PUBLIC và INTERFACE?

Trả lời

33

Các chế độ này hữu ích nếu bạn có mục tiêu được dự định sử dụng lại (thường là thư viện). Định nghĩa PRIVATE chỉ áp dụng cho mục tiêu thư viện, nhưng không áp dụng cho các mục tiêu khác sử dụng thư viện này. Định nghĩa INTERFACE chỉ áp dụng cho các mục tiêu tùy thuộc, chứ không áp dụng cho chính thư viện. Các định nghĩa PUBLIC áp dụng cả cho mục tiêu thư viện cũng như các mục tiêu phụ thuộc.

Ví dụ:

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 
Các vấn đề liên quan