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
参考: