CMakeList的基本寫法

2021-08-09 06:30:52 字數 3031 閱讀 1638

最近需要自己寫cmakalist,所以簡要寫一下一些基本的操作。為圖實用,只寫了常用的簡單操作。

1.確定cmake最低版本需求

cmake_minimum_required

(version

3.0.0)

2.確定工程名
project

(***)

這個不是必須,但是最好寫一下,這一行會引入兩個變數***_binary_dir (二進位制檔案儲存路徑)和 ***_source_dir(源**儲存路徑)

3.新增需要的庫

set(cmake_prefix_path $

"/usr/local/share/opencv")

find_package(opencv 3.2.0 required)

find_package令cmake搜尋所有名為find.cmake的檔案,3.2.0 required給出需要的具體版本,以避免一台電腦安裝了多個版本opencv而造成不必要的錯誤。通常情況下,通過設定cmake_prefix_path來設定cmake搜尋路徑,通常情況下不加也可以,但考慮到**的可移植性,最好還是對搜尋路徑進行對應設定

4.新增需要的標頭檔案

include_directories(include)

include_directories($)

include_directories(/usr/local/cuda-8.0/include/)

如上,將標頭檔案所在路徑寫在括號內即可(上例中將標頭檔案放在了include資料夾中),而需要的一些庫的標頭檔案可以如2行變數的形式,也可以如3行直接給出庫標頭檔案所在的位置

5.確定編譯語言

以使用c++為例,可以用set來設定

set(cmake_cxx_standard 11)
也可以通過add_definitions來設定

add_definitions(-std=c++11)
6.設定變數
add_definitions( -dgpu

-dcudnn )

如darknet中**編譯需要define變數gpu,cudnn,opencv等,則用該語句進行定義

7.新增源**

set(src  $/test.cpp)
通過設定src變數,將源**路徑都給src,如果有多個,可以直接在後面繼續新增:

set(src 

$/src/detector.cpp

$/src/demo.cpp

$/test.cpp

)

8.編譯動態庫並鏈結庫檔案
link_directories($)

add_library(plate_recognition shared $)

target_link_libraries(plate_recognition $)

target_link_libraries(plate_recognition -llianghao -lpthread -lm -lstdc++)

add_library為生成庫檔案,shared為生成動態庫,static為生成靜態庫,前面的plate_recognition為生成的檔名,如上生成的動態庫為libplate_recognition.so,最後$為原始檔路徑。

target_link_libraries為鏈結需要的庫,plate_recognition為需要進行鏈結的檔名,後面接需要鏈結的庫,如第三行鏈結了opencv。如果需要鏈結其他的動態庫,-l後接去除lib字首和.so字尾的名稱,以鏈結liblianghao.so為例,-llianghao。

9.生成可執行檔案

link_directories($)

add_executable(test $)

target_link_libraries(test $)

target_link_libraries(test -llianghao -lpthread -lm -lstdc++)

和8中只有第二行的區別,add_executable表示生成可執行檔案,test為生成的可執行檔名,後接原始檔路徑。

10.整體例項

cmake_minimum_required(version 3.2.0)

add_definitions(-std=c++11)

add_definitions(-g -o2)

#define cuda,opencv,cudnn

add_definitions( -dgpu -dcudnn )

# use opencv

set(cmake_prefix_path $

"/usr/local/share/opencv")

find_package(opencv 3.2.0 required)

if(not opencv_found)

message(warning "opencv not found!")

else()

include_directories($)

endif()

# cuda path

include_directories(/usr/local/cuda-8.0/include/)

# headers

include_directories($/include)

#sources

set(src $/test.cpp)

#lib link

link_directories($)

#build so

add_library(plate_recognition shared $)

target_link_libraries(plate_recognition $)

target_link_libraries(plate_recognition -l*** -l*** -lpthread -lm -lstdc++)

事務的基本寫法

人在職場,不想公升職加薪那是假話,年輕人希望自己在最短的時間內快速公升職加薪不是一件壞事,但是如何讓自己在最短的時間內公升職 加薪,這裡面有一定的學問。筆者根據當代年輕人的就業觀,試從營銷的角度探索職場快速公升職的奧秘。二 入對門 找到自己的專長和興趣所在之後,要對行業進行細緻分析。要能夠了解這個行...

CUDA C 基本寫法

我們來看看基本的cuda c 寫法 include cuda runtime.h include device launch parameters.h global void addkernel int dev p cuda的gpu計算操作,它讓gpu的執行緒分別對dev p陣列的每個元素並行地執行...

Oracle PL SQL的基本寫法 BEGIN

雖然之前寫了不少oracle上的sql語句,但是沒有抽出時間對oracle進行乙個系統的學習,實踐固然重要,但沒有乙個理論上的規範學習與理解,在實踐中就不能舉一反三,就不能寫出高規範高質量的sql語句。pl sql 基本寫法 說明 宣告 異常處理部分為可選,視具體程式而定 declare 宣告變數 ...