软件开发环境搭建

cmake简介

2016-04-12  本文已影响420人  menglj

著名的OpenCV采用了cmake作为工程的编译工具,下面简单介绍一下cmake

CMakeLists.txt

cmake命令读取CMakeLists.txt文件,生成make命令用的Makefile文件。CMakeLists.txt中描述了工程源码等相关信息。

定义工程名

project(工程名)

通过这句话,我们定义了我们的工程名,这里会自动定义2个变量工程名_BINARY_DIR工程名_SOURCE_DIR。这两个变量分别保存了生成目标所在路径和源代码所在路径。

定义目标类型

#编译出可执行程序
add_executable(程序名 源文件列表)
#编译出动态库,生成的文件为`lib库名.so`
add_library(库名 SHARED 源文件列表)
#编译出静态库
add_library(库名 STATIC 源文件列表)

获取源文件列表

最简单的方式是一个一个文件一个文件添加,再就是使用file指令遍历目录下的文件

#递归遍历
file(GLOB_RECURSE SRC_LIST [目录/]*.cpp)
#或只看当前目录下文件
file(GLOB SRC_LIST [目录/]*.cpp)

add_executable(程序名 ${SRC_LIST})

添加头文件查找路径

假设我的头文件搜索路径为工程根目录下的srcinclude两个目录。

include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/src)

PROJECT_SOURCE_DIR工程名_SOURCE_DIR内容相同,都是源码根目录。

使用外部库

以使用OpenCV为例[3]

find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )

target_link_libraries( ${EXEC_NAME} ${OpenCV_LIBS} )

find_package

find_package(<NAME>)指令会设置如下变量:

find_package工作原理请参考[1]

target_link_libraries

指定目标依赖的库信息

Debug/Release

默认cmake生成的makefile为Release版本,如果我们要编译Debug版,可以在cmake执行时,指定参数-DCMAKE_BUILD_TYPE=Debug[4]

安装

使用install指令,指定安装的目标位置

install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)
install (DIRECTORY include/ DESTINATION include)

默认安装在/usr/local,可以通过指定CMAKE_INSTALL_PREFIX的值来变更安装目录。

生成安装包

# 构建一个 CPack 安装包
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE
  "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${Demo_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${Demo_VERSION_MINOR}")
include (CPack)

在make完成后,执行命令

cpack -C CPackConfig.cmake

其他

自动添加子目录

file(GLOB SUBDIRS *)
foreach(DIR ${SUBDIRS})
    if(IS_DIRECTORY ${DIR})
        add_subdirectory(${DIR})
    endif()
endforeach()

取得当前目录名

[2]

get_filename_component(EXEC_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" EXEC_NAME ${EXEC_NAME})

设置目标版本

set_target_properties(目标名称 PROPERTIES VERSION 0.1.1 SOVERSION 0.1)

指定rpath

参考连接,没能试验成功啊。在安装后rpath会被删除掉。

参考文档

  1. How package finding works - cmake.org
  2. Automatically use the directory as the project name in CMake - stackoverflow
  3. Using OpenCV with gcc and CMake
  4. Debug vs Release in CMAKE - stackoverflow
  5. CMake 入门实战
上一篇 下一篇

猜你喜欢

热点阅读