cmake

CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。

通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt

外部编译

外部编译,一个最大的好处是,对于原有的工程没有任何影响,所有动作全部发生在编译目录。通过这一点,也足以说服我们全部采用外部编译方式构建工程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#确定cmake最低版本需求
cmake_minimum_required(VERSION 3.0.0)

#打印
MESSAGE(STATUS "This is install dir " ${CMAKE_INSTALL_PREFIX})

#确定工程名
#(这一行会引入两个变量XXX_BINARY_DIR (二进制文件保存路径)和 #XXX_SOURCE_DIR(源代码保存路径))
project(XXX)

#添加需要的库
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/share/OpenCV")
find_package(OpenCV 3.2.0 REQUIRED)

#添加需要的头文件
include_directories(include)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(/usr/local/cuda-8.0/include/)

#确定编译语言
#add_definitions(-std=c++11)
set(CMAKE_CXX_STANDARD 11)

#设定变量
ADD_DEFINITIONS( -DGPU -DCUDNN )

#添加源代码
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src src)

#编译动态库并链接库文件
link_directories(${PROJECT_SOURCE_DIR})
add_library(plate_recognition SHARED ${SRC})
target_link_libraries(plate_recognition ${OpenCV_LIBS})
target_link_libraries(plate_recognition -llianghao -lpthread -lm -lstdc++)

#生成可执行文件
link_directories(${PROJECT_SOURCE_DIR})
add_executable(Test ${SRC})
target_link_libraries(Test ${OpenCV_LIBS})
target_link_libraries(Test -llianghao -lpthread -lm -lstdc++)

#make install
SET(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})

INSTALL(TARGETS myengine
DESTINATION ../assets/bin/
)

项目删除

CMake默认不提供uninstall这个target,想要的话,输入:

1
xargs rm < install_manifest.txt

对于不修改配置的项目足够了,manifest.txtCMake生成的安装文件列表。


Donde hay humo, hay fuego.