分类

七喜软件园->编程工具->CMake编译工具最新版本下载 附中文手册 官方汉化版
CMake编译工具最新版本下载 附中文手册 官方汉化版

CMake编译工具最新版本下载 附中文手册 官方汉化版

大小:40.1M更新日期:2021/7/2

类别:编程工具下载量:34818

452
39
反馈投诉
下载到手机 注:本软件为电脑软件,不适用于手机用户安装。
其他版本
更多版本

    CMake官方版是一款非常专业的源代码编译工具,该软件具有良好的跨平台性,用户可以用于多个操作系统的运行使用,它主要可以帮助用户用于编译源代码、制作程式库等操作,完全可以满足开发人员的构建环境需求。cmake最新版本支持多种编程语言,如C语言、C++、Fortran、Java等等,软件还简化很多的编译过程,对于编译构建工作十分有帮助,通过它可以更高效率完成编译构建过程,编译的效率大大提高。

    CMake由Kitware创建制作,具有开源、免费、简易等特点,软件还支持平行建构,即可以在内多台计算机上完成构建,同时支持扩展,可以为软件扩展更多的功能,为用户带来更丰富的编译效果,需要的朋友,欢迎到本站下载使用。

    CMake官方版新增内容

    1、内建C语言、C++、Fortran、Java的自动相依性分析功能。

    2、经由CMake脚本语言支援SWIG、Qt、FLTK。

    3、内建对微软VisualStudio.NET和过去的VisualStudio版本的支援,可以产生后缀为.dsp、.sln和.vcproj的文档。

    4、用传统的时间标签侦测档案内容的改变。

    5、支援平行建构(在多台电脑上同时建构)

    6、在许多操作系统上进行跨平台编译,包括Linux、POSIX相容的系统(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系统)、MacOSX和微软Windows95/98/NT/2000/XP等。

    7、产生可以给Graphviz用的全局相依图。

    8、已经和Dart、CTest和CPack等软件测试和释出的工具整合

    CMake官方版使用说明

    成功安装cmake以后,我们就一起来研究下在win10下怎么使用cmake,安装包安装完成以后,我们可以启动cmakegui,具体如下图所示:

    CMake官方版使用说明1

    CMake官方版使用说明2

    本文主要是来分享如何使用cmake配置qt5.5项目的,具体怎么安装qt5.5就不在本文这里来说明,本文假设您的电脑上已经成功安装了qt5.5开发环境,安装成功后如下图所示:

    CMake官方版使用说明3

    qt自带右qmake,那么这里为什么要研究使用cmake来构建基于qt的qt5项目

    呢?

    这是由于在实际开发的过程中,我们开发的项目可能会涉及到很多的第三方库,由于其它第三方库的qt5项目不仅仅是只用qt一家的库,而qmake只针对qt自身的库有优势,项目中需要依赖的很多这些第三方库,手动配置第三方库的.pro文件又确实比较麻烦,那么用cmake来构建项目就非常有必要了,此时cmake的优势非常突出。

    下面我们一起来看看如何使用cmake构建和管理项目:

    首先:使用qtcreater创建中规中矩的qt5的项目helloworld;

    然后编译运行该项目,

    具体如下面所示:

    CMake官方版使用说明4

    CMake官方版使用说明5

    运行cmakegui,在界面窗口中,看到一栏"Whereisthesourcecode",后面有一个按钮"BrowseSource..."用来选择Cmake所在目录,下面的一栏"wheretobuildthebinaries",后面有一个按钮"BrowseBuild..."用来选择构建的项目输出目录,构建好的项目需要和源码目录配合使用,具体如下图所示:

    CMake官方版使用说明6

    然后点击下方Configure按钮配置项目,点击后首次配置需要选择想要构建的项目,具体如下图所示:

    CMake官方版使用说明7

    点击"Finish"按钮,弹出"Error"错误提示框,如下图所示:

    CMake官方版使用说明8

    下面的错误提示文字"CMakeError:Thesourcedirectory"C:/Users/enju/Desktop/helloworld"doesnotappeartocontainCMakeLists.txt.Specify--helpforusage,orpressthehelpbuttonontheCMakeGUI."

    意思是在源码目录"C:/Users/enju/Desktop/helloworld"下面不包含CMakeLists.txt文本文件。

    这就需要我们在项目文件夹中手动创建一个CMakeLists.txt文件。

    文件内容如下:

    #设置cmake版本号

    cmake_minimum_required(VERSION3.11.1FATAL_ERROR)

    #设置工程名称

    project(helloworld)

    #设置工程包含当前目录,非必须

    set(CMAKE_INCLUDE_CURRENT_DIRON)

    #设置自动生成moc文件,一定要设置

    set(CMAKE_AUTOMOCON)

    #查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加

    find_package(Qt5Widgets)

    find_package(Qt5Core)

    find_package(Qt5Gui)

    #查找当前文件夹中的所有源代码文件,

    #也可以通过Set命令将所有文件设置为一个变量

    FILE(GLOBSRC_FILES"./*.cxx")

    #同理,查找当前文件夹中所有的头文件

    FILE(GLOBHEAD_FILES"./*.h")

    #同理,查找当前文件夹中所有的ui文件

    FILE(GLOBUI_FILES"./*.ui")

    #通过Ui文件生成对应的头文件,一定要添加

    qt5_wrap_ui(WRAP_FILES${UI_FILES})

    #添加资源文件

    set(RCC_FILESrcc.qrc)

    #将ui文件和生成文件整理在一个文件夹中,非必须

    source_group("Ui"FILES${UI_FILES}${WRAP_FILES})

    #创建工程文件

    add_executable(${PROJECT_NAME}${SRC_FILES}${HEAD_FILES}${RCC_FILES}${WRAP_FILES})

    #添加Qt5依赖项

    target_link_libraries(${PROJECT_NAME}Qt5::WidgetsQt5::CoreQt5::Gui)

    添加了CMakeLists.txt文本文件的目录结构如下图所示:

    win10下cmake使用入门

    在helloworld工程中添加了CMakeLists.txt文件以后,再次在cmakegui里面点击configure,弹出了错误提示框如下图所示,以及新的错误提示信息:

    CMakeError:CMakewasunabletofindabuildprogramcorrespondingto"MinGWMakefiles".CMAKE_MAKE_PROGRAMisnotset.Youprobablyneedtoselectadifferentbuildtool.

    CMakeError:CMakewasunabletofindabuildprogramcorrespondingto"MinGWMakefiles".CMAKE_MAKE_PROGRAMisnotset.Youprobablyneedtoselectadifferentbuildtool.

    CMakeError:CMAKE_C_COMPILERnotset,afterEnableLanguage

    CMakeError:CMAKE_CXX_COMPILERnotset,afterEnableLanguage

    Configuringincomplete,errorsoccurred!

    这表示没有找到编译工具链!

    CMake官方版使用说明9

    在出现上面的情况的时候,这里的"第一次Configure"后,需要选择一些设置,选择"Specifynativecompilers",具体如下图所示:

    CMake官方版使用说明10

    再点击"Next",选择gcc,g++,本地编译器在qt安装目录下面的tools里面,目录例如"D:\soft\qt5.5\Tools\mingw492_32\bin",在这个界面里选择Qt目录下面的gcc,还有g++,点击Finish完成,具体如下图所示:

    CMake官方版使用说明11

    如果还发现报错了,就设置系统的环境变量,即把d:\opencv\Qt\Qt5.5.0\Tools\mingw492_32\bin加入系统的Path环境变量中,然后点击Configure如下第一幅图所示,然后又弹出一个错误提示框如下第二张图片,其文本提示信息:"Configuringincomplete,errorsoccurred!"表明还有错误!

    CMake官方版使用说明12

    CMake官方版使用说明13

    通过上面的提示错误,我们打开CMakeLists.txt文件,找到信息中指出的错误发生的行数:

    DetectingCXXcompilefeatures-done

    CMakeWarningatCMakeLists.txt:14(find_package):

    Bynotproviding"FindQt5Widgets.cmake"inCMAKE_MODULE_PATHthisproject

    hasaskedCMaketofindapackageconfigurationfileprovidedby

    "Qt5Widgets",butCMakedidnotfindone.

    CMakeLists.txt文件14行以下是:

    #查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加

    find_package(Qt5Widgets)

    find_package(Qt5Core)

    find_package(Qt5Gui)

    看样子是cmake在查找Qt库文件Qt5Widgets的时候发生了错误!

    这个错误只要在CMakeLists.txt文件中添加一行代码:

    set(CMAKE_PREFIX_PATH"D:\\soft\\qt5.5\\5.5\\mingw492_32\\lib\\cmake\\")

    果然设置一下CMAKE_PREFIX_PATH到qtbase目录,就搞定。

    但是这个不是彻底解决问题的方法,最彻底的解决办法是在系统变量里面也加入一个Qt5Widgets_DIR新的环境变量,我们先在Qt的安装路径下找到了FindQt5Widgets.cmake等文件所在目录路径,这类错误可能都可以用这种方法来解决,只要找到相应的*.cmake文件的路径,然后把路径添加到系统的环境变量中,看就可以解决了,具体如下图所示:

    CMake官方版使用说明14

    再次点击Configure按钮,没有错误的话,会显示"Configuringdone"字样,第一次配置完成,具体如下图所示:

    CMake官方版使用说明15

    完成第一次的配置后,接下来再进行第二次配置,再次点击configure按钮,这次配置时间很快就好了,经过两次的配置,点击Generate生成最终解决,具体如下图所示:

    CMake官方版使用说明16

    完成以后,查看helloworld目录下面生成了很多新的文件和目录,具体如下图所示:

    CMake官方版使用说明17

    CMake官方版新手帮助

    刚开始接触CMake的同学往往会被它茫茫多的指令吓到,尤其是神秘的结构化语法、没有命名规律的声明、不知所云的参数列表和复杂的命令行参数,让人不知道从何入手。

    其实,CMake尤其是现代化的CMake核心是围绕构建目标来组织声明,上一节例子中add_executable一行里的hello_cmake_exe就是一个构建目标。此外,add_library定义的库也是一种构建目标。可执行文件和库是构建最终对用户可见的产物,CMake对项目模块依赖的声明就是围绕着这两种目标来展开的。

    add_executable和add_library的第一个参数说明了构建目标的名称,它必须是全局唯一的符号,并且随后全局可访问;紧跟着是各自专有的控制参数,例如可以指定库是静态链接还是动态链接等;再之后是一个可变长度的源文件数组,用于描述直接参与构建当前目标的源文件。

    CMake的声明参数是一系列空格隔开的符号或字符串,同时每个命令都可以有自己的参数列表,这些参数列表没有统一的风格,同时仅通过位置区分而没有命名参数,可以说是CMake最为用户不友好的一点了。

    定义了构建目标之后,就是描述构建目标的各种特性。上面两个命令列出了构建目标所需的源文件,但是还有链接时的库依赖,这就需要target_link_library来声明目标构建依赖的库。构建目标可以是add_executable或add_library声明的,库可以是add_library声明的构建目标,也可以是库文件等。

    此外,构建目标可能还需要包含头文件等include预编译命令依赖的文件,除了在add_executable和add_library中加入以外,还可以随后通过target_sources逐个包含,或者更常见的,通过target_include_directories包含目录下的文件。

    最后,构建目标在编译时还可能有一系列编译选项和宏定义等,可以通过target_compile_options和target_compile_definitions来声明。

    可以看到,链接、文件包含和编译选项的命令都以target_xxx的形式出现,第一个参数是add_executable或add_library声明的构建目标。这就是现代化的CMake围绕构建目标声明的含义。

    值得一提的是,旧版的CMake不支持target_xxx形式的命令,而是通过不带target_前缀的命令来表达相似的含义,但是旧版的命令是通过修改全局状态和获取全局状态来声明的,而非按照构建目标所构成的命名空间区分开的。举例来说,include_directories命令将导致之后及子项目中的所有构建目标在编译时都带上此命令引入的路径下的文件。显然,这很容易导致声明的泄漏,尤其在项目层次复杂,引入其他子项目或作为子项目被其他项目引入时,容易出现难以排查的非预期构建结果,也就限制了项目规模的扩大。

    现代CMake的最佳时间是牢记围绕构建目标组织声明,不仅能避免意外的声明泄漏,还能获得更好的表达力。

    CMake灵活地支持三方库

    一开始我们就提到,广义的构建系统包括三方库的依赖管理。即使是狭义的只处理构建步骤编排的构建系统,也需要有某种方式引入三方库的依赖。

    程序设计实践发展至今,引入三方库依赖的方式无非是systemwise安装依赖,vendor方式携带依赖和利用依赖管理系统的接口与专门的依赖管理系统协作。CMake支持以上三种形式的三方库依赖引入方式,并且抽象了自己统一的find_package接口。

    我们先介绍find_package接口,它的主要使用形式如下。

    find_package(<PackageName>[version][REQUIRED][[COMPONENTS][components...]])

    后面都是可选项,最基础的使用形式就是find_package加一个PackageName信息。CMake会在约定路径和通过选项指定的路径下搜索名为FindPackageName.cmake的文件,并执行其中的逻辑以设置一些关键的变量。约定的PackageName_FOUND标识是否找到对应的依赖以进行差别处理逻辑,其他的变量则根据不同FindPackageName.cmake的策略有所不同,通常包括该依赖暴露的头文件信息,可供链接的库的信息,以及库的构建目标等等,并可能按照模块进行划分以获得更细粒度的导出控制。

    不少成熟的三方库都得到了CMake的原生支持或者提供了可移植的Find脚本,例如Protobuf和Boost等。这些Find脚本通常被写成仅搜索系统级路径的形式,也就是原生支持了查找systemwise安装的第三方依赖的方法。换个角度看,也就是把/usr/和/usr/local/等经典安装路径等同于Maven当中的.m2路径来处理。

    然而,systemwise的方式对运行环境的侵入性明显,很容易影响PATH环境变量和实际使用的三方库,同时容易产生难以解决的版本冲突问题。通常只在临时开发或者隔离性较强的容器环境中才考虑采用这种方法。

    为了避免systemwise的安装依赖,另一种方案是vendor方式携带依赖,也就是常说的thirdparty或contrib或submodule等等。ClickHouse重度使用了这种模式,几乎vendor了它的所有依赖。C/C++/Scheme广泛流行的库通常也是通过此种形式来组织的,Go语言在gomod面世之前乃至现在都广泛使用了vendor的依赖引入模式。

    具体地说,vendor的含义就是依赖库和根项目在源代码层面一起分发,从而在下载根项目源代码时同步就绪了所有依赖库的代码。前面提到原生的Find脚本通常只搜索系统级路径,因此vendor通常也需要手动编写CMake脚本引入依赖项的问题。

    最理想的情况是三方库已经充分考虑了作为子项目被外部引入的情况,例如GoogleTest或gRPC等。它们在项目的根目录下有CMakeLists.txt文件来定义和导出项目的构建目标和头文件、静态链接库等信息,只需要在父项目中通过add_subdirectory声明引入三方库,就可以在CMake的解析框架下导出所有需要的符号。

    然而,现实往往是更复杂的。有些三方库未曾想过跟其他项目协作,有些三方库并不支持CMake或者实现的CMake脚本有问题,例如典型的Poco项目的ENABLE_TESTS选项命名很容易冲突,又未启用相应的CMakePolicy以允许上层临时屏蔽选项。诸如此类的细节问题常常引出难以排查的非预期构建结果,所以富余人力的项目研发团队倾向于撰写一个轻量级的CMake层来管理三方库。

    典型的例如ClickHouse项目,它几乎对所有的项目都配备了一组CMake脚本,并且精心裁剪了依赖库的文件,仅保留构建相关的文件。在根项目的CMake文件中,通过include执行来执行这组配置三方库依赖的CMake脚本,从而达到和find_package或者丝滑的add_subdirectory类似的符号导出效果。

    不过,上面提到的手写CMake脚本跟直接调用find_package的方式是平行的,仅在导出符号一点上可以达到共通。但是我们还能做得更加一致,即利用find_package提供的机制,将vendor的依赖作为systemwise依赖的前置或后置候选被挑选和导入。通过自定义Find脚本的逻辑,兼容systemwise的引入方法,再修改CMake查找Find脚本的配置,就可以主线CMake脚本里一致的使用find_package声明来引入三方库依赖了。

    最后讨论的引入三方库依赖的方式是与其他专门的依赖管理系统协作,例如vcpkg或conan等。这两者都有自己的中央仓库,类似于MavenCentral或JCenter等,来管理三方库,包括版本、平台、名称和库的具体内容等。

    vcpkg通过CMake原生的TOOLCHAIN机制Hook了CMake执行前的阶段,以配置好CMake随后find_package的环境从而能够正确的找到依赖。conan则在CMake对构建系统的一层抽象的基础上再做一层抽象,支持生成CMake生成构建系统所需要的文件,无限套娃,在生成CMakeBinary路径的内容的时候把依赖库的内容也拷贝过去支持CMake索引到。

    可惜由于C++的跨平台构建太过复杂,并且一直以来的习惯都是vendor+魔改三方库,因此这两种已经是最流行的专门的依赖管理系统并没有大范围的获得采用。

    顺带一提,CMake本身还提供了ExternalProject和FetchContent等内容来支持vendor以外的模式,在生成构建系统期间拉取或者根据配置寻找三方库依赖并复制到构建路径下,最终以相对路径生成构建系统文件。不过这两个方案非常难用,而且没有类似于.m2或.ivy这样全局的依赖管理目录,其实每次构建的时候还是要每项目的重新拉依赖,比起vendor来说并不少多少力气,反而失去了vendor魔改的灵活性。实际采用的人少之又少。

    CMake官方版怎么进行编译

    确认NAOqi可执行档和模块包没有运行。

    运行CMake界面。

    在"Whereisthecodesource"字段,选择NAOqiSDK的范例目录(例如:"/path/to/aldebaran-sdk/modules/src/helloworld")。

    在"Wheretobuildthebinaries"字段,选择一个临时构建目录。如果没有,就创建一个(例如:"/path/to/aldebaran-sdk/modules/modules/src/examples/helloworld/build")。

    点击"configure"按钮。选择要使用的集成开发环境(IDE)。Windows系统选择"VisualStudio82005"或"VisualStudio92008";Linux和Mac系统选择"UNIXMakefiles"。

    点击"configure"按钮。选择要使用的集成开发环境(IDE)。Windows系统选择"VisualStudio82005"或"VisualStudio92008";Linux和Mac系统选择"UNIXMakefiles"。

    选择"Specifytoolchainfileforcross-compiling",然后输入"/path/to/aldebaran-sdk/toolchain-pc.cmake"。

    注释:

    即使您不进行交叉编译,也必须规定一个工具链文件。

    如果某些配置字段为红色,请再次点击"configure"按钮。所有字段都应该为灰色。点击OK。

    Windows系统下,在您的构建目录里会生成一个可打开的.sln文件。

    编译范例项目。在Linux或Mac里,只需"cd"到构建目录,并键入"make"。

    注释:

    您可以随时重置项目。操作时,删除构建目录的内容并重新启动CMake。

    请勿编辑VisualStudioProject,因为它是实时生成的(详情请参见Cmake的程序说明书)。可以通过编辑Cmake文件来进行配置。

    CMake官方版怎么进行编译

    CMake官方版基础说明

    Flang:实现MSVC运行时库抽象

    ctest:fix--showonly=json-v1输出,带有必需的\u文件属性

    CQuestCimuleLIDIO兼容性本地VaR生存期

    cmaffinity:为alpinelinux上的cpu_zero添加include

    查找路径:修复旧样式空名称列表上的崩溃

    fileapi:修复cmp0037旧行为的codemodelv2目标文件名

    findboost:为最后一个已知版本简化条件块

    FindBoost:删除不正确的1.70个定时器依赖项

    findboost:为遗留变量展开兼容性接口目标

    findboost:添加对boost1.71的支持

    FindBoost:阐明遗留变量在警告消息中的作用

    findboost:容忍未来的boost接口库

    CMake官方版软件特色

    1、内建C语言、C++、Fortran、Java的自动相依性分析功能。

    2、经由CMake脚本语言支援SWIG、Qt、FLTK。

    3、内建对微软VisualStudio.NET和过去的VisualStudio版本的支援,可以产生后缀为.dsp、.sln和.vcproj的文档。

    4、用传统的时间标签侦测档案内容的改变。

    5、支援平行建构(在多台电脑上同时建构)

    6、在许多操作系统上进行跨平台编译,包括Linux、POSIX相容的系统(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系统)、MacOSX和微软Windows95/98/NT/2000/XP等。

    7、产生可以给Graphviz用的全局相依图。

    8、已经和Dart、CTest和CPack等软件测试和释出的工具整合

    精品推荐

    相关下载

    热门标签
    软件排行榜
    最新更新
    网友评论
    我要跟贴
    • 甘肃兰州联通 网友 一别两宽

      正好需要!!

    • 山西临汾移动 网友 上天入地小仙女

      拿下,试水看看效果如何

    • 江苏无锡电信 网友 满眼醉意

      非常非常给力,非常非常实用

    • 四川眉山移动 网友 悄悄抓把糖

      这个可不好找,终于找到了

    • 山西长治移动 网友 醉酒思红颜ゝ

      这个很厉害

    +
    0