cmake自己寫庫的modules檔案

2021-10-14 08:02:38 字數 1489 閱讀 2854

最近在做海思的平台,用到了一些第三方庫,比如glog、gflag等。我們都知道cmake可以自己去通過find_package來查詢相應的庫,我也是被逼自己寫modules-config.cmake檔案。

find_package的原理和使用方法,網上有一大堆,我就不再廢話了,我還是以glog為例,來進行說明。

我們在做嵌入式的時候,經常要自己編譯一些庫檔案,然後指定乙個安裝路徑,我現在編譯了glog然後,安裝到了install目錄中,目錄結構如下圖所示。這裡面是沒有可供find_package來使用的-config.cmake檔案的,

測試用的main.cpp很簡單,如下

int main(int argc, char* ar**) 

}

只是簡單的列印一條log資訊。

頂層的cmakelists.txt如下:

cmake_minimum_required(version 3.15)

project(glog_test c cxx)

add_executable(

$ main.cpp)

set(glog_dir $/third_party)

find_package(glog required)

target_link_libraries(

$ private

glog::glog)

這裡面重要的是glog_dir的設定,這個路徑是glog-config.cmake檔案存在的路徑。find_package函式會到這個路徑下尋找-config.cmake或config.cmake檔案。找到後,就進行載入。看到target_link_llibraries這個裡面寫的是glog::glog,這個是庫的別名,叫符合現代cmake的寫法,下面的**會說道。

再來看glog-config.cmake檔案,

add_library(glog::glog static imported)

set_target_properties(glog::glog properties

imported_location $/lib/libglog.a

inte***ce_include_directories $/include

)

這裡面也很簡單,目前的寫法,是適應最新的target方式的寫法,使用add_library新增乙個target,這個target是引用乙個庫,庫的型別是靜態的型別,使用imported建立的target,cmake不會給他新增編譯功能,再接下來,就是設定target的相關屬性,對於鏈結乙個庫來說,最重要的兩個方面,其實就是對應的標頭檔案在什麼地方,和庫檔案在什麼地方,所以set_target_property裡面,就只是設定了這兩個內容。**都在壓縮包裡面

安利自己寫的easy clipboard庫

clipboard.js 是乙個非常好用的剪下板外掛程式,但是隨著前端框架的演變,使用者與網頁互動的方式越來越多,不僅限於點選事件了,並且在很多情況下,我們可能不需要它強制性自帶的點選事件,所以我打算把 clipboard.js 精簡一下,把點選事件刪掉,這就是我開發 easy clipboard ...

自己寫函式庫

大家現在寫 程式,是不是都是用新唐提供的函式庫?在體驗 開發板的一開始,我也是使用函式庫,畢竟這個太方便了。可是有一天,我發現乙個只使用時鐘和io以及 除錯串列埠的程式居然查過了16k的時候,我震驚了!天啊,這麼乙個簡單的 功能,需要這麼多的程式空間嗎?抱著懷疑的態度,我讀了新唐提供的庫。看完後,乙...

C呼叫自己寫的動態庫

自己做了libhello.so庫後,寫了個簡單的測試 將測試 和庫檔案放到了同一路徑下,gcc main.c l.lhello,結果執行後報錯,a.out error while loading shared libraries libhello.so cannot open shared obje...