CMake的简单应用
各种不同的Make工具遵循着不同的规范和标准,所执行的Makefile格式也千差万别。如果软件想跨平台,必须要保证能够在不同平台编译,这就得为每一个Make工具写一次Makefile,这将是一件让人抓狂的工作。使用CMake工具就可以很好的解决这个问题。
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目,生成目标文件,还支持安装(makeinstall)、测试安装的程序是否能正确执行(maketest,或者ctest)、生成当前平台的安装包(makepackage)、生成源码包(makepackage_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
在linux平台下使用CMake生成Makefile并编译的流程如下:
1.编写CMake配置文件CMakeLists.txt。
2.执行命令cmakePATH或者ccmakePATH生成Makefile。其中,PATH是CMakeLists.txt所在的目录。
3.使用make命令进行编译。
语法
CMake基本语法由命令、注释和空格组成,其中命令是不区分大小写的。符号#后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。变量引用使用${VAR}形式。
command(args ...)#comment
常用命令:
cmake_minimum_required(VERSION2.8)#CMake最低版本号要求
project(Demo)#指定项目的名称
set(SRCSmain.cpp...) #设置变量
include_directories(/usr/include/jsoncpp) #添加头文件目录,比如使用的一些lib库
aux_source_directory(.DIR_SRCS)#查找当前目录下的所有源文件,并将名称保存到DIR_SRCS变量
add_subdirectory(math)#添加math子目录
add_executable(Demomain.cc...) #指定生成目标,第一个参数为目标文件名
add_library(MathFunctions${DIR_LIB_SRCS})#添加一个库文件
target_link_libraries(DemoMathFunctions) #添加链接库
获取更多CMake信息:
cmake--help
cmake--help-command-list
cmake--help-variable-list
示例代码
示例代码1:
cmake_minimum_required(VERSION2.8)#CMake最低版本号要求 set(CMAKE_CXX_FLAGS"-std=c++0x")#设置编译参数 include_directories(/usr/include/jsoncpp)#添加头文件目录 set(SRCS#设置变量SRCS,将所有源文件添加到变量SRCS SamsungRequestResolver.cpp SamsungResolverContainer.cpp SamsungResponseResolver.cpp BanCat.cpp main.cpp ) add_executable(framework${SRCS})#指定生成目标 target_link_libraries(frameworkjsoncpphiredisboost_system)#添加链接库
示例代码2:(来源于参考引用1)
代码目录如下所示,./Demo3目录下有一个main.cc文件和一个math目录。对于这种嵌套目录的情况,需要在目录./Demo3和./Demo3/math下各创建一个CMakeLists.txt。
./Demo3 | +---main.cc | +---math/ | +---MathFunctions.cc | +---MathFunctions.h
父目录中的CMakeLists.txt:
#CMake最低版本号要求 cmake_minimum_required(VERSION2.8) #项目信息 project(Demo3) #查找当前目录下的所有源文件 #并将名称保存到DIR_SRCS变量 aux_source_directory(.DIR_SRCS) #添加math子目录,math目录下的CMakeLists.txt文件和源代码会被处理 add_subdirectory(math) #指定生成目标Demo add_executable(Demomain.cc) #添加链接库 target_link_libraries(DemoMathFunctions)
子目录中的CMakeLists.txt:
#查找当前目录下的所有源文件 #并将名称保存到DIR_LIB_SRCS变量 aux_source_directory(.DIR_LIB_SRCS) #生成链接库 add_library(MathFunctions${DIR_LIB_SRCS})
编译
在编译之前,首先要将CMakeLists.txt文件放在代码目录中。为了方便管理生成的makefile文件、目标文件等文件,最好创建一个build目录专门用来存放这些文件。在代码目录,依次执行以下命令:
mkdirbuild cdbuild cmake.. make
参考引用:
1.http://www.hahack.com/codes/cmake/
2.https://www.cnblogs.com/qixianyu/p/6574048.html
到此这篇关于CMake的简单应用的文章就介绍到这了,更多相关CMake入门内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。