编译工具cmake的使用

CMake允许开发者编写一种平台无关的CMakeList.txt文件来定制整个编译流程,再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如Linux/Unix的Makefile或者Windows的VisualStudio工程等。

在Linux平台下使用cmake生成Makefile并编译的流程,如下:

1、 编写CMake配置文件CMakeLists.txt。

2、 执行命令cmake PATH或者ccmake PATH生成Makefile。其中,PATH是CmakeLists.txt所在目录。

3、 使用make命令进行编译。

 

查看cmake版本号:

@执行camke –version

CMakeLists.txt的常用命令函数

(1)     CMake最低版本号要求

@cmake_minimum_required(VERSION 2.8)

 

(2)     项目信息

@project(PROJECT_NAME)

 

(3)     添加工程子目录

@add_subdirectory(SUB_DIRECTORY_PATH)

 

(4)     添加编译参数

添加DEBUG宏定义

@add_definitions(-DDEBUG)

编译参数

@add_definitions(“-Wall-ansi -pedantic -g”)

 

(5)     变量的使用,set定义变量及赋值

@set(EXT_LIBS ${EXT_LIBS} <lib_name1><lib_name2> <…>)

在变量EXT_LIBS列表后追加lib_name1、lib_name2等。

 

(6)     指定头文件的搜索路径,相当于指定gcc的-I参数

@include_directories(${PATH_DIR_INCLUDE_FILE})

 

(7)     扫描PATH目录下的所有源文件,并将文件保存到PATH_DIR_SRCS变量

@aux_source_directory(PATH_DIR_SRCS)

 

(8)     扫描PATH目录下的所有源文件,并生成链接库

@aux_source_directory(PATH_DIR_LIB_SRCS)

@add_library(LIB_NAME ${PATH_DIR_LIB_SRCS})//默认静态库,也可指定动态库

 

(9)     动静态链接库的搜索路径,相当于指定gcc的-L参数

@link_directories

 

(10)  添加链接库

@target_link_libraries(EXECUTE_FILE${EXT_LIBS})

 

(11)  指定生成目标

@add_executable(EXECUTE_FILE ${DIR_SRCS})

将DIR_SRCS变量中的源文件生成指定的EXECUTE_FILE(可执行文件)

 

(12)  列表操作

@list([APPEND|INSERT|LENGTH|REMOVE_ITEM|REMOVE_AT|SORT]…)

一些参数解释:

APPEND:追加若干元素

INSERT:在指定位置插入若干元素

LENGTH:返回list的长度

GET:返回list中所有被index索引的元素构成的list

REMOVE_ITEM:删除指定项

REMOVE_AT:删除指定索引处的项

SORT:按照字母顺序对list中的内容进行排序

REMOVE_DUPLICATES:删除list中的重复项

REVERSE:将list内容前后倒换

 

(13)  加入配置头文件,用于处置CMake对源码的设置

CMake对源码的设置,在加入project时,会自动引入PROJECT_SOURCE_DIR和PROJECT_BINARY_DIR。

configure_file(

“${PROJECT_SOURCE_DIR}/config.h.in”

“${PROJECT_BINARY_DIR}/config.h”

)

@ccmake命令

选择方向键在窗口跳转选项,按下enter键可以修改该选项。修改完成后,按下c选项完成配置之后,再按g键确认生成Makefile。

 

(14)  输出信息

@MESSAGE([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]“message to display” …)

参数解释,用于指定消息的类型:

(无)——重要消息

STATUS——非重要消息

WARNING——CMake警告,会继续执行

AUTHOR_WARNING——CMake警告(dev),会继续执行

SEND_ERROR——CMake错误,继续执行,但是会跳过生成的步骤

FATAL_ERROR——CMake错误,终止所有处理过程

 

(15)  设置宏定义,一般用于区分是否使用库或者一些文件,常与if连用

@option(USE_MYMATH “Use provided mathimplementation” ON)

@if(USE_MATH)

@include_directories(“${PROJECT_SOURCE_DIR}/math”)

@add_subdirectory(math)

@set(EXTRA_LIBS ${EXTRA_LIBS}MathFunctionsFile)

@endif(USE_MYMATH)

 

(16)  生成安装包

(17)  安装

@install

(18)  测试CTest测试工具

#启动测试

@enable_testing()

#测试程序是否成功运行

@add_test(test_usage Demo)

@set_tests_properties(test_usage PROPERTIESPASS_REGULAR_EXPRESSION “Usage:.*base exponent”)

#测试5的平方

@add_test(test_5_2 Demo 5 2)

@set_tests_properties(test_5_2 PROPERTIESPASS_REGULAR_EXPRESSION “is 25”)

(19)  支持gdb

@set(CMAKE_BUILD_TYPE “Debug”)

@set(CMAKE_CXX_FLAGS_DEBUG “$ENV{CXXFLAGS}-O0 -Wall -g -ggdb”)

 

@set(CMAKE_BUILD_TYPE “Release”)

@set(CMAKE_CXX_FLAGS_RELEASE“$ENV{CXXFLAGS} -O3 -Wall”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值