[英]Examples of when PUBLIC/PRIVATE/INTERFACE should be used in cmake
我正在讀關於cmake的關鍵字PUBLIC
, PRIVATE
, INTERFACE
和整個本段來到這里在cmake的文檔。
通常,如果依賴項僅用於庫的實現而不是在頭文件中,則應在使用 target_link_libraries() 和 PRIVATE 關鍵字時指定依賴項。 如果在庫的頭文件中額外使用了依賴項(例如用於類繼承),則應將其指定為 PUBLIC 依賴項。 庫的實現不使用而僅由其頭文件使用的依賴項應指定為 INTERFACE 依賴項。
我了解您在這三個關鍵字之間的選擇如何影響target_link_libraries
和target_include_directories
的行為,但我不明白本段中解釋的三種情況之間的區別。 有人可以提供一個玩具的例子嗎
PRIVATE
)PUBLIC
)中使用依賴項INTERFACE
)讓我們首先處理PUBLIC
和PRIVATE
:
假設您正在編寫一個帶有 Qt GUI 的工具。 你這個 GUI 應該允許你使用插件動態地向 GUI 添加元素。 此外,用戶應該能夠通過設置激活和停用插件,並且需要在未來啟動程序時激活相同的插件。
因此,您的庫提供了 2 個功能:
PUBLIC
lyPRIVATE
ly。 INTERFACE
可見性
您很少會使用此可見性。 通常你需要訪問標題等。 在你自己的圖書館里。
值得注意的例外是只有頭文件的庫。 這些實際上不會導致在您的構建系統中創建目標,並且它們不能單獨構建。 CMake 目標本身只是一種通過target_link_libraries
提供頭文件和依賴庫的便捷方式。
另一個例外是導入的目標。 這些也不會編譯為您項目的一部分。 它們只包含有關已經構建的庫的信息。 對於導入的目標,您只能使用INTERFACE
可見性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.