從零開(kāi)始詳細(xì)介紹CMake

第一講:
cmake是什么:
多人使用不同的編程語(yǔ)言(相同),開(kāi)發(fā)同一個(gè)項(xiàng)目,最終輸出可知性文件/共享庫(kù)-》cmake
操作通過(guò)cmakelist完成的。
為了處理大型c/cpp/java項(xiàng)目準(zhǔn)備。
第二講:cmake helloeworld編譯
- 寫一個(gè)helloworld文件
- 寫一個(gè)cmakelist
- 編譯
- cmake .
- make
- 生成可執(zhí)行文件
第三講:cmakelist語(yǔ)法介紹
- project關(guān)鍵字:工程名字和支持語(yǔ)言
- project (HELLO CXX/JAVA)
- project_binary_dir
- project_source_dir
- set關(guān)鍵字
- 顯示指定變量/設(shè)置變量
- message
- 終端輸出用戶自定義信息
- send_error
- status
- fatal_error
- add_executable
- 生成可知性文件
- add(hello $(SRC_LIST})
- 工程名字和可執(zhí)行文件沒(méi)有關(guān)系
- 語(yǔ)法基本原則
- ${}讀取變量
- 參數(shù)之間通過(guò)分好或者空格分割
- 指令部分大小寫,參數(shù)和變量區(qū)分大小寫
- main.cpp可加“”可不加“”
- ADD_EXE中文件名可以不加后綴
第四講:內(nèi)部構(gòu)建和外部構(gòu)建
- 內(nèi)部構(gòu)建產(chǎn)生臨時(shí)文件;外部構(gòu)建放在build里面
- 建立build dir
- 進(jìn)入build
- cmake ..
- binary_dir /build; source_dir: 原始文件夾
- ;build:make
第五講:helloworld看起來(lái)like工程
- 添加src目錄,存放源代碼;doc文檔;runhello.sh; 目標(biāo)文件bin;
- 目標(biāo)文件放入bin
- 每一個(gè)目錄下買年都要有cmakelist
- src touch cmakelist
- 先寫工程目錄的cmakelist
- PROJECT(HELLO)
- 關(guān)聯(lián)起來(lái):
- ADD——SUBDIR(src bin)(生成文件放入bin)
- 寫src cmakelist
- add_executable(hello main.cpp)
- 更改二進(jìn)制到bin
- camke ..(build)
- make
- 生成hello,生成bin(build),可知性文件在bin
- add_subdir:告訴smkae還有一個(gè)目錄,
第六講:安裝helloworld
- make install
- make install 指定目錄
- 二進(jìn)制,動(dòng)態(tài)庫(kù),靜態(tài)庫(kù)。。。
- 建立copyright
- 建立 doc
- doc:hello.txt
- 工程目錄:readme
- 建立runhello.sh
- 安裝文件copuriht readme
- 編譯工程;cmakelist
- install(files copyright readme destination path) (最前面調(diào)用cmake install prefix, usr/local/share/doc/cmake/
- 安裝腳本
- programs:非目標(biāo)的可執(zhí)行程序的安裝
- install(programs runhello.sh destination bin) (usr/local/bin)
- 安裝目錄
- install(directory doc/(目錄下的內(nèi)容) destination share/loc/cmake)
- cd build; amke ..
- make; ./bin/hello!
- 安裝:make install
第七講:靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的構(gòu)建
- 靜態(tài)庫(kù):.a, .lib;動(dòng)態(tài)庫(kù):.so,.dll
- 靜態(tài)庫(kù):直接整合到程序,動(dòng)態(tài)庫(kù):編譯時(shí)不放到程序中,運(yùn)行時(shí)加載
- 任務(wù)1. 建立靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)
- 任務(wù)2:安裝頭文件和共享庫(kù)
- 建立build;建立cmakelist;建立lib;進(jìn)入lib
- 建立cmakelist;建立hello.cpp; touch hello.h;
- 項(xiàng)目cmakelist:
- project (hello)
- add_subdir(lib bin)
- cd lib;
- cmakelist:
- set (libhello_src hello.cpp)
- add_lib(hello shared/static ${libhello_src}) (沒(méi)有hello.h,共享庫(kù)名字libhello.so)
- cd build; cmake.. make; cd bin; -> libhello.so
第八講:同時(shí)構(gòu)建static和dynamic
- 名字一樣指揮構(gòu)建動(dòng)態(tài)庫(kù),不會(huì)靜態(tài)庫(kù)(名字不一樣可以)
- set_target_projecties
- 設(shè)置輸出名字
- 安裝共享庫(kù)和頭文件
- lib有頭文件:安裝頭文件
- install (files helloh diest include/hello)
- install (targets hello hello_staic libraty(動(dòng)態(tài)庫(kù)關(guān)鍵字) destination lib archive desitaion lib)(相對(duì)路徑)
- 默認(rèn)/usr:
- cmake -DCMAKE_PREFIX=/usr ..
- make
- make install
第九講:如何使用共享庫(kù)和頭文件
- mkdir build touch Cmakelist; make drc; cd src
- touch cmakelist; cd ..
- cd src; vim main.cpp; cd ..
- vim CMkalist
- project (hello)
- add_subdirrector(src bin)
- cd src; bim cmakelist
- add_executable(hello main.cpp)
- cd .. cd build cmake ..; make;
- include_directories(/usr/include/hello)(src cmakelist)
- link_directories/target_link_libraries
標(biāo)簽: