cmake开发工具
CMake所有的功能特性设置全部都遵照一定的行业规范来设定,能够帮助开发人员来对正在处理中的软件编程项目打造牢固的基底框架,进而供应测试和安装包的封装,随即进行C++语言环境下的运行验证,出现问题时及时定位到最为关键的位置,看是否需要重新修改,一般都不会有太大的运行问题。
CMake引见
CMake是一个跨平台的装载(编译)工具,可以用易懂的语句来描写一切平台的装载(编译进程)。他可以输入各类各样的makefile或project文件,能测试编译器所拥有的C++特征,近似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 其实不直接建构出终究的CMake,而是发生尺度的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依普通的建构技巧运用。这使得熟习某个集成开辟情况(IDE)的开辟者可以用尺度的技巧建构他的CMake,这类可使用各平台的原生建构系统的才能是 CMake 和 SCons 等其他近似系统的区分的地方。
CMake特点
1.开放源代码,运用类 BSD 答应公布。
2.跨平台,并可转换 native 编译设置文件,在 Linux/Unix 平台,转换 makefile,在 苹果平台,可以转换 xcode,在 Windows 平台,可以转换 MSVC 的工程文件。
3.可以办理大型项目,KDE4 就是最好的证实。
4.简化编译构建进程和编译进程。Cmake 的工具链很是易懂:cmake+make。
5.高效力,依照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比运用 autotools 来 构建 KDE3.5.6 的 kdelibs 快 40%,首要是由于 Cmake 在工具链中没有 li^ool。
6.可扩大,可觉得 cmake 编写特定性能的模块,扩大 cmake 性能。
组态档
组态档是用一种建构CMake特定的特别编程说话写的CMake剧本。
内建C说话、C++、Fortran、Java的主动相依性解读性能。
经过CMake剧本说话拥有SWIG、Qt、FLTK。
内建对微软Visual Studio .NET和曩昔的Visual Studio版本的拥有,可以发生后缀为.dsp、.sln和.vcproj的文档。
用传统的时间标签侦测档案内容的改动。
拥有平行建构(在多台电脑上同时建构)
在很多操作系统长进行跨平台编译,包罗Linux、POSIX相容的系统(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系统)、Mac OS X和微软Windows 95/98/NT/2000/XP等。
发生可以给Graphviz用的全局相依图。
已和Dart、CTest和CPack等CMake测试和释出的工具整合。
运用方式
CMake的一切的语句都写在一个叫:CMakeLists.txt 的文件中。当CMakeLists.txt文件肯定后,可以用ccmake指令对相干 的变量值开启设置。这个指令必需指向CMakeLists.txt地点的目次。设置完成以后,运用cmake指令转换响应的makefile(在Unix like系统下)或 project文件(指定用window下的响应编程工具编译时)。
其根基操作流程为:
$> ccmake directory
$> cmake directory
$> make
此中directory为CMakeList.txt地点目次;
第一条语句用于设置编译选项,如VTK_DIR目次 ,普通这一步不需求设置,直接履行第二条语句便可,但当呈现毛病时,这里就需求以为设置了,这一步才真正直上用处;
第二条指令用于按照CMakeLists.txt转换Makefile文件;
第三条指令用于履行Makefile文件,编译顺序,转换可履行文件;
CMake的履行就是这么易懂,其难点在于若何编写CMakeLists.txt文件,上面连系例子易懂引见CMakeLists.txt的编写,看上面这个CMakeLists.txt
#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#set extern libraries
SET(LIBRARIES
libm.so
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
或用上面这个CMakeLists.txt
#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin m)
这是一个测试数学函数的顺序的CMakeLists.txt,"#"前面为正文的内容,CMake的指令全数为大写
第2行指定转换的工程名为test_math
第4行指定头文件目次为include
第8行指定源文件目次为src,并将其赋值给情况变量DIR_SRCS
第10行设定情况变量TEST_MATH的值为情况变量DIR_SRCS的值,此处用于展示若何用情况变量对情况变量开启赋值
第14即将数学函数库赋值给情况变量LIBRARIES,固然,可以不消这个情况变量,而在前面直接运用该库名
第18行用于指定转换文件,将情况变量TEST_MATH目次下的一切文件编译转换../bin目次下的可履行文件bin
第20行指定../bin/bin履行时的链接库为情况变量LIBRARIES的值-libm.so
上面给出源文件
/src/main.c:
#include
#include"../include/a.h"
int main()
{
double b=25.0;
double a=0.0;
a=get_sqrt(b);
printf("a is %lf, b is %lf ",a,b);
return 0;
}
/src/a.c
#include"../include/a.h"
double get_sqrt(double var1)
{
return sqrt(var1);
}
/include/a.h
#ifndef A_FILE_HEADER_INC
#define A_FILE_HEADER_INC
#include
double get_sqrt(double var1);
#endif
将CMakeLists.txt放在以后目次下,履行CMakeLists.txt
$> cmake .
$> make
便可转换可履行文件,在目次/bin下的bin文件,好了运转看其结果是不是和所想一样。
运用教程
设置
从本站下载cmake后,我们可以鄙人载途径获得一个压缩包,如图所示,解压此压缩包,解压缩有我们可以获得下图所示的文件。上面我们起头设置cmake。
进入电脑属性
在此电脑上右键单击,翻开右键菜单,点击属性菜单,如图所示。
进入初级系统设置
在属性页面,我们在左侧可以看到初级系统设置选项,如图所示,点击初级系统设置,进入初级系统设置页面。
进入情况变量设置
在初级系统设置页面,可以找到情况变量选项,如图所示,点击情况变量,进入情况变量页面。
进入path变量
在情况变量页面,我们可以看到系统变量框,在系统变量部门,我们可以找到path变量,如图所示,双击path变量。翻开path变量设置窗口。
设置path变量
翻开path变量设置窗口后,将适才解压的文件地点途径复制,然后点击新建,在新的栏目中粘贴途径,点击肯定便可。
验证设置是不是成功
在指令行输出"cmake --version",若是输入如图所示,即设置成功。
编译
运转GUI的cmake场景布局:
履行Configure:
运转以后,转换了以下文件:
转换Makefile:
履行Generate以后转换以下文件:
运转make开启编译:
编译完成后,在build目次转换Tutorial.exe,运转Tutorial.exe 25便可以看到运转成果:
运转make install装载顺序:
运转make test开启测试:
罕见成绩
CMake缓存是甚么?
用户在第一次运转CMakeCMake时,它会转换一个CMakeCache.txt文件。此文件包括诸如本机JPEG库的存在和定位之类的内容。
加入条目以呼应某些CMake指令(例如FIND_LIBRARY),由于它们在源树中的一切处所在CMakeLists文件中的一切处所处置。
在CMake运转后,并建立了一个CMakeCache.txt文件 - 你可以编纂它。CMake GUI,将许可您轻松地编纂选项,或您可以直接编纂文件。
编纂缓存的首要缘由是赐与CMake当地库(如JPEG)的定位,或禁止它运用当地库并在源代码树中运用库的版本。
CMake不克不及改动缓存文件自己中的现有条目。若是您的CMakeLists.txt文件转变光鲜明显,您将需求从缓存文件中删除相干条目。若是你还没有手动编纂缓存文件,你可以删除它,尔后从头运转CMake。
cmake若何处置途径包括头文件?
CMake中,加入头文件途径,对应的函数叫includ。然后在参数中,把一切需求加入的途径,加出来便可以了。
加入库途径,对应的函数叫LINK_DIR,一样,在参数中,把一切的途径加出来便可以了。
CMake中的函数挪用,是不辨别大小写的,大小写可以夹杂运用。
加入库,对应的函数叫LINK_LIBR,把一切的库加出来便可。这
里有一个注重事项,这个不需求我们手动加入.lib这个后缀了,挺便利的。
然后履行CMake,转换内容。然后这里需求切换到Rele版本,开启编译。转换成功并运转。
检查之所以Debug版本编译有成绩,发现依靠库为osg.lib而不是osgd.lib,也就是说依靠库是Rele版的。
为什么要运用项目构建工具?
为什么要运用cmake和autotools之类的项目构建工具? 我想,这生怕是方才接触CMake项目标人最应当问的成绩之一了。
Hello, world!这个最经典的顺序置信我们每一个人都写过。不管在甚么平台下,编译和运转这个顺序都仅需求很是易懂的操作。但现实上,hello,world最多只能算是一个实例顺序,底子算不上一个真实的CMake项目。
任何一个CMake项目,除写代码以外,另有一个更加主要的义务,就是若何组织和办理这些代码,使项目代码条理布局清楚易读,这对今后的保护任务大有裨益。使想一下,若是把一个像KDE4那末大的项目像hello world那样,把全数代码都放到一个main.cpp文件中,那将会是何等可骇的一件工作。别说KDE4,就是我们随意一个几千行代码的小项目,也不会有人干这类蠢事。
决议代码的组织技巧及其编译技巧,也是顺序设计的一部门。是以,我们需求cmake和autotools如许的工具来帮忙我们构建并保护项目代码。
看到这里,或许你会想到makefile,makefile不就是办理代码主动化编译的工具吗?为何还要用此外构建工具?
其实,cmake和autotools恰是makefile的下层工具,它们的目标恰是为了发生可移植的makefile,并简化本身脱手写makefile时的庞大任务量。若是你本身脱手写过makefile,你会发现,makefile凡是依靠于你以后的编译平台,并且编写makefile的任务量对比大,处理依靠关系时也轻易犯错。是以,对大大都项目,该当斟酌运用更主动化一些的cmake或autotools来转换makefile,而不是下去就脱手编写。
小编测评
cmake开发工具自然是给广大开发者准备的,它的优势在于覆盖到一整个软件编程环节,且在开发中特别重视测试的存在,让众多的bug问题都在测试过后速度修复,且可以掌握好项目出现问题的关键区域,给框架重点信息区域添加不同颜色的标识,后续验证的时候就不会迷路。
喜欢小编为您带来的cmake开发工具吗?希望可以帮到您~更多软件下载尽在软件爱好者