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