CMake是經常使用的跨平臺編譯器。圖像這塊在給服務端作開發時,常有兩個需求:html
(1)代碼打成.so包,供別人調用;學習
(2)編譯、測試,用valgrind測內存狀況。測試
工程較大時,藉助CMake完成很方便。下面分別給出兩種狀況下,CMakeLists.txt的簡單示例。ui
1. 藉助CMake打.so包url
把目錄utils下的文件打出.so包。spa
其中CMakeLists.txt內容:.net
cmake_minimum_required(VERSION 2.8)htm
aux_source_directory(. utils_src)blog
add_library(utils SHARED ${utils_src})教程
set_target_properties(utils PROPERTIES output_name "utils")
注意:前面的關鍵字能夠大寫也能夠小寫,括號內的關鍵字必須大寫。
編譯:
cmake .
make
生成了共享庫libutils.so
2. 編譯實際的項目
項目sticker_me中文件結構以下,其中build目錄用於生成編譯的結果。
它們之間的調用關係以下:
各個CMakeLists.txt以下:
./CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(sticker_me)
add_subdirectory(src)
add_subdirectory(facedetect)
add_subdirectory(utils)
src/CMakeLists.txt:
find_package(OpenCV REQUIRED)
include_directories(facedetect utils)
aux_source_directory(. src_dir)
add_executable(sticker_me ${src_dir})
target_link_libraries(sticker_me ${OpenCV_LIBS} utils facedetect)
facedetect/CMakeLists.txt:
include_directories(utils)
aux_source_directory(. facedetect_dir)
add_library(facedetect SHARED? ${facedetect_dir})
set_target_properties(facedetect PROPERTIES output_name "facedetect")
target_link_libraries(facedetect utils)
utils/CMakeLists.txt:
aux_source_directory(. utils_dir)
add_library(utils SHARED ${utils_dir})
set_target_properties(utils PROPERTIES output_name "utils")
編譯:
cd build
cmake ..
make
藉助valgrind測試內存,log重定向到文件log.txt中:
cd build/src
valgrind --leak-check=full --log-file=log.txt ./sticker_me
參考: