最近需要自己寫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 宣告變數 ...