由於c++更為自由,執行速度較快,所以我們常常會使用c++寫一些演算法,這其中少不了對cmakelists的折騰,這裡會記錄一下我使用cmake的流程以及問題,最後給出乙個使用opencv的小demo
我的理解,cmake就是將makefile進一步封裝,用起來更加友好,我們只要編寫cmakelists.txt檔案,就可以自動生成makefile,然後再使用make進行原始碼編譯。
下面我們可以假設乙個c++工程的目錄結構作為例子,便於我們理解:
.
|-build
|-cmakelists.txt
|-include
|-a.h
|-b.h
|-src
|-a.cpp
|-b.cpp
|-main.cpp
想編譯你的工程檔案,就需要對cmakelists.txt檔案進行編寫,簡單應用的話,具體編寫流程都是大概的套路,下面寫一寫我的理解。
首先要注意一點,檔案路徑的起始點是從cmakelists.txt平行目錄開始的
指定cmake的最小版本
cmake_minimum_required(version 3.17)
這裡沒啥好說的,很多ide都會提前幫你寫好,比如clion,指定一下cmake的最小版本。
設定專案名稱
set(project_name 專案名稱)
project($)
這裡project沒什麼好說,寫一下你的工程名字就可以,也就是最後編譯鏈結後生成控制台程式的名稱(當然也可能是庫之類的)
主要講一下set
的用法,set一般有兩個作用:
set(a "$/src/main.cpp")
這裡是將後面那個路徑賦值給a,後面再使用這個路徑的時候直接使用$
即可
set(project_name 專案名稱)
這裡將專案名稱賦值給內建變數project_name
,同樣,後面使用的時候用$
設定c++標準
set(cmake_cxx_standard 14)
同樣使用set指令
描述你要編譯的內容
aux_source_directory(src dir_srcs)
這個命令是用來自動尋找指定目錄下的所有.cpp檔案,並將其賦值給乙個變數dir_srcs
當然還可以自定義搜尋的條件在,這裡用到file命令
file(glob var "*.cpp" "src/*.cpp")
在指定路徑中按照指定條件搜尋檔案,並存入變數
設定編譯型別
add_executable($ $) #可執行檔案
add_library($ static $) #靜態庫
add_library($ shared $) #動態庫
使用外部庫,比如opencv
首先要找到庫所在位置,主要是查詢find.cmake檔案,首先在$
以及$
中進行查詢,找不到的話再在cmake安裝目錄下的modules資料夾下查詢。設定時優先使用$
find_package(opencv required)
find_package([version] [exact] [quiet] [module][required] [[components] [components...]]
[optional_components components...]
[no_policy_scope])
找自己的庫用:
find_library(var path)
接下來設定標頭檔案依賴
set(head "include")
include_directories($)
include_directories($)
最後設定一下鏈結庫
target_link_libraries($ $)
列印一些資訊
使用message
命令
message(status "project: $")
message(status "opencv library status:")
message(status " version: $")
message(status " libraries: $")
message(status " include path: $")
一眼就可以看出來如何用,相當於乙個log系統,前面是等級
一些內建變數
cmake_module_path預設為空,指定查詢外部包的路徑
executable_output_path可執行檔案位置
opencv中一些內建變數
cmake_minimum_required(version 3.17)
set(project_name indentationdetection)
project($)
set(cmake_cxx_standard 14)
find_package(opencv required)
include_directories($)
message(status "project: $")
message(status "opencv library status:")
message(status " version: $")
message(status " libraries: $")
message(status " include path: $")
aux_source_directory(src dir_srcs)
message(status "src file: $")
add_executable($ $)
target_link_libraries($ $)
寫好以後進入到build資料夾,開啟命令列:
cmake -g "mingw makefiles" ../(cmakelists.txt所在位置)
然後就可以在該目錄下愉快的使用make進行編譯了 CMakeLists檔案總結 不定更新
1.設定cmake版本 專案名稱等 cmake minimum required version 3.15 project setprojectname set cmake cxx standard 14 2.標頭檔案包含目錄 include directories include 3.原始檔包含 ...
CMakeLists基礎使用指南
使用cmake編譯的檔案目錄結構 build 編譯中間檔案目錄 cmakelists.txt include 頭檔案目錄 a.h b.h lib 外部動態鏈結庫目錄 libb.so src 程式檔案目錄 a.cpp main.cpp cmakelists的主要作用 新增管理檔案間的相互依賴關係 ma...
CmakeLists檔案說明
cmakelists.txt 設定構建native library所需的最小cmake版本 cmake minimum required version 3.4.1 aux source directory studycpp dir srcs file glob allcpp.建立和命名乙個庫 ad...