日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CMake 中的 PUBLIC,PRIVATE,INTERFACE

發布時間:2024/10/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMake 中的 PUBLIC,PRIVATE,INTERFACE 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

CMake中經常會使用?target_**()?相關命令,target_**()?命令支持通過?PUBLIC,PRIVATE?和?INTERFACE?關鍵字來控制傳播。本文主要介紹下這三個關鍵字的區別。

二、解釋

以?target_link_libraries(A B)?命令為例,從理解的角度解釋:

  • PRIVATE 依賴項 B 僅鏈接到目標 A,若有 C 鏈接了目標 A,C 不鏈接依賴項 B 。
  • INTERFACE 依賴項 B 并不鏈接到目標 A,若有 C 鏈接了目標 A,C 會鏈接依賴項 B 。
  • PUBLIC 依賴項 B 鏈接到目標 A,若有 C 鏈接了目標 A,C 也會鏈接依賴項 B 。

從使用的角度解釋,若有 C 鏈接了目標 A :

  • 如果依賴項 B 僅用于目標 A 的實現,且不在頭文件中提供給 C 使用,使用 PRIVATE 。
  • 如果依賴項 B 不用于目標 A 的實現,僅在頭文件中作為接口提供給 C 使用,使用 INTERFACE 。
  • 如果依賴項 B 不僅用于目標 A 的實現,而且在頭文件提供給 C 使用,使用 PUBLIC 。

例 子

舉一個簡單的例子說明一下

add_library(C c.cpp) add_library(D d.cpp)add_library(B b.cpp) target_link_libraries(B PUBLIC C) target_link_libraries(B PRIVATE D)add_executable(A a.cpp) target_link_libraries(A B)

因為 C 是 B 的 PUBLIC 依賴項,所以其會被傳播到 A 。
因為 D 是 B 的 PRIVATE 依賴項,所以其不會傳播到 A 。

三、補充

這里補充下使用?target_**()相關命令,有無?target?的區別。

以?target_include_directories()?命令為例,include_directories(dir)?是一個全局設置,其會將?dir?添加到當前 CMakeLists 文件中每個目標的?INCLUDE_DIRECTORIES?屬性中。即當前 CMakeLists 文件其下所有的子目錄都會添加 dir 目錄。

因此,建議使用有?target?的命令來減少不必要或多余的目錄包含和鏈接。

轉載:CMake 中的 PUBLIC,PRIVATE,INTERFACE - 簡書

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的CMake 中的 PUBLIC,PRIVATE,INTERFACE的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。