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.txt
是CMake
生成的安装文件列表。
Donde hay humo, hay fuego.