[英]Create a self contained c++ shared library with CMake
我創建了一個“獨立的”C++ 共享庫,它使用了兩個額外的庫,即 OpenCL 和 Boost C++。 為此,我使用了 CMake。
理想情況下,該庫將是自包含的,即外部應用程序不必顯式鏈接到 OpenCL 和 Boost。 相反,他們只會鏈接到我的圖書館。
但是,使用 g++(而不使用 CMake)編譯外部應用程序需要用戶知道 header 文件的位置,對於 OpenCL 和 Boost,除了明確指定它們(使用 -I*sub/library/path *)。
有沒有辦法讓 CMake 生成一個包含屬於子庫的標頭路徑的庫? 這樣,用戶只需鏈接到我的庫,而無需負責為子庫標頭提供文件路徑。
謝謝
對於將 CMake 與目標一起使用的任何人,您可以通過將 OpenCL 和 Boost 指定為庫的PUBLIC
或INTERFACE
鏈接庫來執行此操作,如下所示:
target_link_libraries(my_library PUBLIC OpenCL::OpenCL Boost::Boost)
target_link_libraries state target_link_libraries
文檔:
PUBLIC
、PRIVATE
和INTERFACE
關鍵字可用於在一個命令中指定鏈接依賴項和鏈接接口。PUBLIC
之后的庫和目標鏈接到鏈接接口,並成為鏈接接口的一部分。PRIVATE
之后的庫和目標鏈接到鏈接接口,但不是鏈接接口的一部分。INTERFACE
之后的庫附加到鏈接接口,不用於鏈接<target>
。
不僅鏈接標志對於INTERFACE_LINK_LIBRARIES
來說是可傳遞的,而且還包括目標包含目錄(只要這些包含目錄也被指定為PUBLIC
或INTERFACE
在與依賴目標相關聯時使用target_include_directories
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.