欢迎来到天天文库
浏览记录
ID:8823666
大小:229.50 KB
页数:11页
时间:2018-04-08
《在linux下使用cmake构建应用程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、在linux下使用CMake构建应用程序王程明(wangchengming.jlu@gmail.com),硕士研究生,吉林大学计算机科学与技术学院本文介绍了一个跨平台的自动化构建系统CMake在linux上的使用方法。CMake是一个比automake更加容易使用的工具,能够使程序员从复杂的编译连接过程中解脱出来。文中通过一些例子介绍使用CMake处理多源文件目录的方法、查找并使用其他开发包的方法以及生成debug版和release版程序的方法。1CMake简介CMake是一个跨平台的自动化建构系统,它
2、使用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件,如Unix的Makefile或WindowsVisualC++的projects/workspaces。文件CMakeLists.txt需要手工编写,也可以通过编写脚本进行半自动的生成。CMake提供了比autoconfig更简洁的语法。在linux平台下使用CMake生成Makefile并编译的流程如下:Ø编写CmakeLists.txt。Ø执行命令“cmakePATH”或者“ccmakePATH”生成Makefil
3、e(PATH是CMakeLists.txt所在的目录)。Ø使用make命令进行编译。2第一个工程现假设我们的项目中只有一个源文件main.cpp清单1源文件main.cpp#includeintmain(){std::cout<<"Helloword!"<4、EQUIRED(VERSION2.6)AUX_SOURCE_DIRECTORY(.DIR_SRCS)ADD_EXECUTABLE(main${DIR_SRCS})CMakeLists.txt的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,符号"#"后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。例如对于清单2的CMakeLists.txt文件:第一行是一条命令,名称是PROJECT,参数是main,该命令表示项目的名称是main。第二行的命令限定了C5、Make的版本。第三行使用命令AUX_SOURCE_DIRECTORY将当前目录中的源文件名称赋值给变量DIR_SRCS。CMake手册中对命令AUX_SOURCE_DIRECTORY的描述如下:aux_source_directory()该命令会把参数中所有的源文件名称赋值给参数。第四行使用命令ADD_EXECUTABLE指示变量DIR_SRCS中的源文件需要编译成一个名称为main的可执行文件。完成了文件CMakeLists.txt的编写后
4、EQUIRED(VERSION2.6)AUX_SOURCE_DIRECTORY(.DIR_SRCS)ADD_EXECUTABLE(main${DIR_SRCS})CMakeLists.txt的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,符号"#"后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。例如对于清单2的CMakeLists.txt文件:第一行是一条命令,名称是PROJECT,参数是main,该命令表示项目的名称是main。第二行的命令限定了C
5、Make的版本。第三行使用命令AUX_SOURCE_DIRECTORY将当前目录中的源文件名称赋值给变量DIR_SRCS。CMake手册中对命令AUX_SOURCE_DIRECTORY的描述如下:aux_source_directory(
6、需要使用cmake或ccmake命令生成Makefile。ccmake与命令cmake的不同之处在于ccmake提供了一个图形化的操作界面。cmake命令的执行方式如下:cmake[options]这里我们进入了main.cpp所在的目录后执行“cmake.”后就可以得到Makefile并使用make进行编译,如下图所示。图1.camke的运行结果1处理多源文件目录的方法CMake处理源代码分布在不同目录中的情况也十分简单。现假设我们的源代码分布情况如下:图2.源代码分布
7、情况其中src目录下的文件要编译成一个链接库。Ø第一步,项目主目录中的CMakeLists.txt在目录step2中创建文件CMakeLists.txt。文件内容如下:清单3目录step2中的CMakeLists.txtPROJECT(main)CMAKE_MINIMUM_REQUIRED(VERSION2.6)ADD_SUBDIRECTORY(src)AUX_SOURCE_DIRECTORY(.DIR_SRCS)ADD_EXECUTABLE(main${DIR_SRCS})TARGET_LINK_LI
8、BRARIES(mainTest)相对于清单2,该文件添加了下面的内容:第三行,使用命令ADD_SUBDIRECTORY指明本项目包含一个子目录src。第六行,使用命令TARGET_LINK_LIBRARIES指明可执行文件main需要连接一个名为Test的链接库。Ø第二步,子目录中的CmakeLists.txt在子目录src中创建CmakeLists.txt。文件内容如下:清单4.目录src中的CmakeLists.txtAUX_SOUR
此文档下载收益归作者所有