天天看點

CMake簡介,打包so檔案,編譯實際項目

CMake簡介和使用示例   

CMake是常用的跨平台編譯器。圖像這塊在給服務端做開發時,常有兩個需求:

 (1)代碼打成.so包,供别人調用;

 (2)編譯、測試,用valgrind測記憶體情況。

工程較大時,借助CMake完成很友善。下面分别給出兩種情況下,CMakeLists.txt的簡單示例。

1. 借助CMake打.so包

 把目錄utils下的檔案打出.so包。

CMake簡介,打包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目錄用于生成編譯的結果。

CMake簡介,打包so檔案,編譯實際項目

它們之間的調用關系如下:

CMake簡介,打包so檔案,編譯實際項目

各個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

繼續閱讀