簡體   English   中英

使用 CMake 創建一個自包含的 c++ 共享庫

[英]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 指定為庫的PUBLICINTERFACE鏈接庫來執行此操作,如下所示:

target_link_libraries(my_library PUBLIC OpenCL::OpenCL Boost::Boost)

target_link_libraries state target_link_libraries文檔

PUBLICPRIVATEINTERFACE關鍵字可用於在一個命令中指定鏈接依賴項和鏈接接口。 PUBLIC之后的庫和目標鏈接到鏈接接口,並成為鏈接接口的一部分。 PRIVATE之后的庫和目標鏈接到鏈接接口,但不是鏈接接口的一部分。 INTERFACE之后的庫附加到鏈接接口,不用於鏈接<target>

不僅鏈接標志對於INTERFACE_LINK_LIBRARIES來說是可傳遞的,而且還包括目標包含目錄(只要這些包含目錄也被指定為PUBLICINTERFACE在與依賴目標相關聯時使用target_include_directories 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM