CMake簡介和使用示例
CMake是常用的跨平台編譯器。圖像這塊在給服務端做開發時,常有兩個需求:
(1)代碼打成.so包,供别人調用;
(2)編譯、測試,用valgrind測記憶體情況。
工程較大時,借助CMake完成很友善。下面分别給出兩種情況下,CMakeLists.txt的簡單示例。
1. 借助CMake打.so包
把目錄utils下的檔案打出.so包。
其中CMakeLists.txt内容:
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. utils_src)
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
參考:
cmake_百度百科
CMake wiki
CMake快速入門教程:實戰
cmake 學習筆記(一)
CMake Practice