一 弊琴、基本原理理解
在GitHub下載了C++工程翘骂,通過先CMAKE再在vscode中打開的方法棋弥,實現(xiàn)部署編譯調(diào)試核偿。Cmake的功能其實就是將cpp文件和lib文件連接起來,哪個cpp文件需要哪個lib文件顽染,相當于自動配置了c++工程中每個工程的屬性漾岳,如下圖所示轰绵,可以看到工程的各項屬性,如鏈接庫尼荆、包含目錄等左腔,還可在makelist文件中以分別配置debug的屬性和release的屬性。
二捅儒、CMake將opencv加入到cpp工程中
c++工程與python的一個不同就是擴展包安裝的沒有python那么簡單快速液样,一個pip install就可以把一些開源依賴包裝上并使用了。當前有個工程需要依賴opencv的函數(shù)巧还,#include <opencv2/opencv.hpp> // 用于矩陣和圖像處理
鞭莽,如何通過cmake將opencv集成到cpp工程中呢。
- 首先要安裝opencv麸祷,官網(wǎng)下載其編譯好的exe文件澎怒,執(zhí)行之后是一個extracting框,會把文件提取到指定的文件夾中阶牍。
- 然后需要把其中的D:/opencv/build/文件夾放到系統(tǒng)環(huán)境變量的path變量下丹拯,因為OpenCVConfig.cmake和OpenCVConfig-version.cmake這兩個文件在這個文件夾里,CMakeLists.txt文件中的
find_package( OpenCV REQUIRED )
之所以能找到opencv的package荸恕,就是因為cmake通過找到以上兩個cmake文件乖酬,可以知道opencv這個包的信息了。 - 寫你的cpp文件融求,官方文檔中也有例程可以做測試用咬像,OpenCV: Using OpenCV with gcc and CMake,然后就是要寫CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp ) #displayimage.cpp是對應(yīng)的cpp文件名
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
- 這樣就可以cmake生成工程了生宛。
從這個應(yīng)用可以看出,其他的CPP庫應(yīng)該也是一樣的套路陷舅,只要庫有對應(yīng)的cmake文件倒彰,并且讓cmake找到這個cmake文件,就可以用find_package()方法來找到并應(yīng)用這個包了莱睁。
三待讳、 CMake將nlohmann_json庫加入工程中
與opencv不同,這個庫沒有cmake文件仰剿,直接將其源代碼整體文件夾放入本工程文件夾中创淡,名稱是nlohmann_json,然后再cmakelist.txt文件中南吮,加入add_subdirectory(nlohmann_json )
和target_link_libraries( DisplayImage PRIVATE nlohmann_json::nlohmann_json)
琳彩,這樣工程中就能用json功能了。在調(diào)試過程中發(fā)現(xiàn),nlohmann_json文件夾中必須有cmakelist.txt文件露乏,不然會報錯碧浊。
四、Boost庫加入到工程中
這個庫的源碼文件好找瘟仿,但是exe安裝文件不好找辉词,后來找到后安裝到C盤,找到其中的cmake文件所在的文件夾猾骡,說明可以用find_package()來設(shè)置這個工程的依賴瑞躺。直接用find_package (Boost REQUIRED )
報錯,找不到這個包兴想,然后看cmake的手冊幢哨,看這個find_package()從什么位置去找包,發(fā)現(xiàn)有一個位置變量可以定義搜索位置嫂便,就是set(CMAKE_FIND_PACKAGE_REDIRECTS_DIR "C:/local/boost_1_86_0/lib64-msvc-14.3/cmake")
捞镰,于是設(shè)置搜索位置后,find_package()就不報錯了毙替。