2014-09-25 16 views
29

Tôi mới dùng CMAKE và hơi bối rối với các từ khóa PUBLIC, PRIVATE và INTERFACE liên quan đến target_link_libraries. Tài liệu đề cập rằng chúng có thể được sử dụng để chỉ định cả phụ thuộc liên kết và giao diện liên kết trong một lệnh.CMake target_link_libraries Giao diện phụ thuộc

Phụ thuộc liên kết và giao diện liên kết thực sự có ý nghĩa gì?

+0

Câu hỏi tương tự: http://stackoverflow.com/questions/26243169/cmake-target-include-directories-meaning-of-scope – TManhente

Trả lời

66

Nếu bạn đang tạo thư viện chia sẻ và tệp cpp nguồn #bao gồm tiêu đề của thư viện khác (Ví dụ: QtNetwork), nhưng tệp tiêu đề của bạn không bao gồm tiêu đề QtNetwork, thì QtNetwork là phụ thuộc PRIVATE.

Nếu tệp nguồn và tiêu đề của bạn bao gồm tiêu đề của thư viện khác, thì đó là phụ thuộc PUBLIC.

Nếu tệp tiêu đề của bạn nhưng không phải tệp nguồn của bạn bao gồm tiêu đề của thư viện khác, thì đó là phụ thuộc INTERFACE.

Thuộc tính xây dựng khác của các phụ kiện PUBLICINTERFACE được truyền đến thư viện tiêu thụ. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements

+7

Đây là giải thích rõ ràng nhất về câu hỏi này mà tôi từng nghe. Tôi muốn [tài liệu cmake] (https://cmake.org/cmake/help/latest/command/target_link_libraries.html) đã rõ ràng! :-) – Ela782

+1

Cảm ơn lời giải thích, tôi hiểu ý nghĩa hiện tại nhưng tại sao chỉ định các vấn đề 'PUBLIC' hoặc' PRIVATE'? Nó thay đổi gì? – user3667089

+1

Sử dụng 'PRIVATE' không thêm phụ thuộc vào các dự án liên kết đến thư viện của bạn. Nó sạch hơn và nó cũng tránh được các xung đột có thể xảy ra giữa các phụ thuộc và người dùng của bạn. – user2658323

Các vấn đề liên quan