cmake 使用靜態庫archive檔案

2021-09-30 14:27:39 字數 1673 閱讀 5995

t2

├── build

├── cmakelists.txt

└── src

├── cmakelists.txt

└── main.c

最外層的cmakelists.txt中內容為

cmake_minimum_required(version 2.8)

project(ma52103231)

cmake_policy(set cmp0002 old)#cmp0002 old的概念見下文

cmake_policy(set cmp0015 new)#cmp0015 new的概念見下文

add_subdirectory(src construct)

依然如此簡單,清晰

src/cmakelists.txt中的內容為

aux_source_directory(. all_sources)#將當前目錄(.)下的所有原始檔(*.c *.cpp)加入到變數all_sources中

add_executable(myexpect $)#宣告要用所有的原始檔生成乙個可執行程式myexpect

include_directories(../../t1/build/include)#定義了原始檔中要使用的某些**件的所在路徑,這個路徑使用了當前目錄的字首,

#而當前目錄就是當前cmakelists.txt所在目錄

link_directories(../../t1/build/libstatic)#這個其實也是使用了當前目錄的概念,不過需要使用cmp0015 new這個規則,否則,我還真找不到當前目錄是哪個

target_link_libraries(myexpect core)#定義我們的可執行程式要鏈結的庫,此處是core(預設是動態庫,不過目標檔案裡面只有靜態庫,所以就鏈結靜態庫了,假設

#動態庫和靜態庫都存在,那就指定具體的名字,比如libcore.a 或者 libcore.so)

add_executable(myexpect $)#此處再次使用了這句話,是為了解決cmake的乙個問題(沒有這句的link_directories這句話會不起作用)。同時,如果不用時

#規則cmp0002 old的話,在build目錄執行cmkae ..時會因為有兩句同樣的add_executable而停止工作

main.c中的內容

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

很簡單

在build目錄執行cmake .. 後再執行make,build目錄會生成如下檔案

cmakecache.txt  cmakefiles  cmake_install.cmake  construct  makefile
我們的可執行程式就在construct目錄中了

cmakefiles  cmake_install.cmake  makefile  myexpect
執行它得到

root@hu-virtual-machine:/home/hu/project/test_cmake/t2/build/construct# ./myexpect 

my help

cmake編譯動態庫和靜態庫

cmake minimum required version 2.6 project hello 新增原始檔 aux source directory dir srcs 設定編譯引數 set cmake c flags g wall 新增標頭檔案路徑 include directories incl...

cmake學習(一)靜態庫與動態庫構建

so 共享庫,shared object 節省空間,在執行時去連線,如果執行機器上沒有這些庫檔案就不能執行。a 靜態庫,archive 靜態庫和程式化為一體,不會分開。通過 ldd命令可以檢視乙個可執行程式所依賴的的共享庫。使用環境變數ld library directory可以指定共享庫位置 一 ...

cmake中使用so庫

cmake minimum required version 2.0 project cmaketest 標頭檔案搜尋路徑 include directories home user cvcode slambook ch2 庫檔案搜尋路徑 link directories home user cvc...