cmake是一款专业的cmake编译工具。最好用的cmake编译器cmake。其目的是帮助您配置和生成软件包的构建文件。它允许您从相同的源树创建构建,生成交叉编译,在源树之外构建目录树,生成用于查找可执行文件,文件和库的缓存,使用依赖于多个库的复杂目录层次结构和工具,例如as并为许多平台和IDE生成makefile,包括Unix,Windows,Mac OS X,OS / 2,MSVC,Cygwin,MinGW和Xcode。该实用程序具有简单直观的GUI,可让您直接从主窗口配置大多数主要参数,并支持您为包含CMakeLists纯文本文件的项目选择源文件夹。另外,您可以指定所生成项目的构建目录。为了读取所有输入文件并识别项目中使用的变量,需要按下“配置”按钮。要以红色显示变量,您需要重复配置过程,直到不再有红色条目为止。只要主面板中没有红色条目,您就可以激活将文件写入指定目录的构建过程。值得一提的是,它还具有以下功能:包含文件/库和可执行文件,运行一组外部程序,使用条件构建,从单个源树创建多个编译树以及构建本地处理和外部处理等。特征。总而言之,CMake带有一组高级功能,可帮助您管理依赖于多个库的软件应用程序的构建过程。
软件特色:
强大的开源软件编译环境,专门供开发人员检查和打包代码。
软件开发通常是一个漫长的过程,甚至在采用可测试形式之前都涉及多个步骤。生成构建文件和处理源代码,维持其良好的结构和组织要求在开发的每个阶段都需要专门的实用程序。
通常,将项目放在一起需要生成所谓的makefile和“ make”程序,以便所有内容成为一个整体。如果源代码文件组织在这些“ makefiles”中,则它们可以更易于编译,这是CMake可以帮助您实现的最终目标。
该工具作为GUI应用程序提供,并提供了一种使用最少的配置即可生成生成文件的相当简单的方法。这些功能整齐地放置在主窗口中,因此整个过程应该非常简单。
您需要做的第一件事是浏览源文件夹,并确保CMakeLists.txt文件存储在此目录中,否则操作将无法完成。
解决这些问题后,您可以指定二进制文件发送到的输出位置。其余任务需要对配置进行一些更改,但这不必担心,因为它们大多数都是自动化的。
因此,只要单击“配置”,CMake就会继续读取源文件夹中包含的文件以检测项目的变量,它将以红色显示。彻底检查它们并确保分配给每个值的值正确后,您可以按``生成''按钮并在指定位置创建一个构建文件。
总而言之,CMake确实是一个功能强大的工具,但它主要针对必须实施高科技流程的开发人员和高级用户。
使用说明:
1.选择项目的源目录。它应该包含CMakeLists。项目的txt文件。
2.选择项目的构建目录。这是将在其中构建项目的目录。它可以与源目录相同或不同。为了便于清理,建议使用单独的构建目录。如果目录不存在,CMake将创建目录
直肠。
3.选择源目录和二进制目录后,可以按“配置”按钮。这将导致CMake读取所有输入文件并发现项目使用的所有变量。第一次显示该变量时,它将为红色。用户应检查红色变量以确保该值正确。对于某些项目,配置过程可能是迭代的,因此请继续按配置按钮,直到不再有红色条目为止。
4.一旦不再有红色条目,则应单击“生成”按钮。这会将构建文件写入构建目录。
软件功能:
支持复杂的大型构建环境。 CMake已在多个大型项目中得到确认。
生成本机生成文件(例如,Unix上的makefile; MS Visual C ++上的工作区/项目)。因此,标准工具可用于任何平台/编译器配置。
强大的命令包括查找包含的文件,库和可执行文件的功能;包括封装标准功能的外部CMake文件;测试系统接口;支持具有变量继承的递归目录遍历;可以运行外部程序;支持有条件的建设;支持正则表达式扩展;等等
支持现场和异地建设。可以从单个源树获得多个编译树。
可以轻松扩展以添加新功能。
CMake是开源的。
CMake使用旨在连接到图形编辑器的缓存运行。高速缓存提供可选的交互,以有条件地控制构建过程。
更新日志:
CMake现在支持Android的交叉编译和简单的工具链文件。
在用具有必要功能的“忍者”工具时,“忍者”生成器学会了有条件地支持Fortran。有关更多信息,请参阅
“if()”命令获得了新的布尔比较操作“ LESS_EQUAL”,“ GREATER_EQUAL”,“ STRLESS_EQUAL”,“ STRGREATER_EQUAL”,“ VERSION_LESS_EQUAL”和“ VERSION_GREATER_EQUAL”。
现在,“ try_compile()”命令源文件签名在生成的测试项目中表示特定于配置的标志(例如“ CMAKE__FLAGS_DEBUG”)。以前仅使用当前工具链的默认标记。请参见策略“ CMP0066”。
现在,“工具链文件”可以设置“ CMAKE_EXE_LINKER_FLAGS_INIT”,“ CMAKE_SHARED_LINKER_FLAGS_INIT”和“ CMAKE_MODULE_LINKER_FLAGS_INIT”变量,以初始化“ CMAKE_EXE_LINKER_AG_S____ER__AG_RED_S___ER_FLAGS_CM_CM_ER_AGAG_CM_CM_CM__
CTest现在支持具有新的“ FIXTURES_SETUP”,“ FIXTURES_CLEANUP”和“ FIXTURES_REQUIRED”测试属性的测试装置。当使用正则表达式或“ -rerun-failed”来限制要运行的测试时,如果任何测试需要夹具,夹具设置和清除测试将自动添加到执行集中。
对于新版本的CMake,我们不再为“ cmake.org”提供Linux i386二进制文件。
Vim支持文件“ cmake-indent.vim”,“ cmake-syntax.vim”和“ cmake-help.vim”已被删除,以支持现在由vim-cmake-syntax项目提供的文件。
支持使用某些编译器来构建CMake本身(CMake仍然支持使用这些编译器来生成其他项目的构建系统):
Visual Studio 7.1和2005-替换VS 2008及更高版本
MinGW.org mingw32被MSYS2 mingw32和mingw64取代
平台:
CMake现在支持Android的交叉编译和简单的工具链文件。
现在,AIX支持Clang编译器。
命令:
“ add_custom_command()”命令获得了一个新的“ DEPFILE”选项,该选项与“ Ninja”生成器一起使用,以为构建工具提供隐式依赖项信息。
“ cmake_parse_arguments()”命令获得新的“ PARSE_ARGV”模式,该模式直接从“ function()”主体中的“ ARGC”和“ ARGV#”变量中读取参数。
“ export()”命令获得了“ ANDROID_MK”选项,该选项用于生成“ Android.mk”文件,该文件引用由CMake作为预构建的Android NDK构建系统构建的库。
“文件(下载)”和“文件(上传)”命令获得“ HTTPHEADER”和“ USERPWD:”选项。
在构建为目标32位体系结构时,请学习“ find_library()”和“ find_package()”命令以在“ lib32 /”目录中进行搜索。请参阅“ FIND_LIBRARY_USE_LIB32_PATHS”全局属性。
通过设置两个新变量“ CMAKE_FIND_PACKAGE_SORT_ORDER”和“ CMAKE_FIND_PACKAGE_SORT_DIRECTION”的“ find_package()”命令,可以通过“名称”或“自然”排序对兼容库进行排序。
“ if()”命令获得了新的布尔比较操作“ LESS_EQUAL”,“ GREATER_EQUAL”,“ STRLESS_EQUAL”,“ STRGREATER_EQUAL”,“ VERSION_LESS_EQUAL”和“ VERSION_GREATER_EQUAL”。
“ install()”命令获得了“ EXPORT_ANDROID_MK”子命令,该子命令用于安装“ Android.mk”文件,该文件引用已安装的库作为预构建的Android NDK构建系统。
“字符串(TIMESTAMP)”和“文件(TIMESTAMP)”命令获得对“%a”和“%b”占位符的支持。这些是工作日和月份的缩写。
现在,“ try_compile()”命令源文件签名在生成的测试项目中表示特定于配置的标志(例如“ CMAKE__FLAGS_DEBUG”)。以前仅使用当前工具链的默认标记。请参见策略“ CMP0066”。
量:
加了变量“ CMAKE_FIND_PACKAGE_SORT_ORDER”以控制“ find_package()”命令的排序模式。
添加了变量“ CMAKE_FIND_PACKAGE_SORT_DIRECTION”以控制“ find_package()”命令的排序方向。
现在,当在构建树中首次启用该语言时,“工具链文件”可以设置“ CMAKE__FLAGS_INIT”变量来初始化“ CMAKE__FLAGS”缓存条目。
现在,“工具链文件”可以设置“ CMAKE_EXE_LINKER_FLAGS_INIT”,“ CMAKE_SHARED_LINKER_FLAGS_INIT”
d在第一棵树中初始化“ CMAKE_MODULE_LINKER_FLAGS_INIT”变量以初始化“ CMAKE_EXE_LINKER_AG_S____ER__AG_RED_S___ER_FLAGS_CM____ER_FLAG_RED_CM____ER_FLAG_RED_CM_EACH”。
属性:
在Apple平台上,“ BUNDLE_EXTENSION”目标属性现在也适用于Frameworks和App Bundles。
添加了“ BINARY_DIR”目录属性以获得与从中读取该属性的源目录相对应的二进制目录的绝对路径。
添加了“ BUILDSYSTEM_TARGETS”目录属性,以获取项目在目录中添加的逻辑构建系统目标名称的列表。
引入“ LINK_WHAT_YOU_USE”目标属性,并支持“ CMAKE_LINK_WHAT_YOU_USE”变量来检测(在UNIX上)链接的共享库,但运行“ ldd -r -u”不需要这些共享库。
添加了“ SOURCE_DIR”目录属性,以获取与目录关联的源目录的绝对路径。
添加了“ SUBDIRECTORIES”目录属性,以获取由目录中的项目添加的子目录列表。
添加了“ VS_SDK_REFERENCES”目标属性,以告知Visual Studio生成器引用指定的SDK。
创建了“ VS_TOOL_OVERRIDE”源文件属性,以将用于源文件的工具通知Visual Studio生成器。
现在,“ WINDOWS_EXPORT_ALL_SYMBOLS”目标属性适用于设置了“ ENABLE_EXPORTS”属性的可执行目标。
添加了“ XCODE_FILE_ATTRIBUTES”源文件属性,以告知“ Xcode”生成器在文件的Xcode项目属性中生成自定义内容。
模块:
添加了“ AndroidTestUtilities”模块,以管理测试数据到Android设备的传输。
“ CheckFortranSourc
“ eCompiles”模块宏“ CHECK_Fortran_SOURCE_COMPILES”获得了“ SRC_EXT”选项,用于指定自定义测试Fortran源文件扩展名。
“ ExternalProject”模块获得了“ HTTP_USERNAME”和“ HTTP_PASSWORD”选项来设置http下载凭据。
“ ExternalProject”模块获得了“ HTTP_HEADER”选项,用于添加http下载头。
“ FindBISON”模块“ BISON_TARGET”宏学习了一个新的“ REPORT_FILE”选项,用于指定野牛“ --report-file =“选项。
现在,“ FindBZip2”模块提供了导入的目标。
引入了“ FindICU”模块以查找Unicode国际组件(ICU)库和程序。
学习了“ FindMatlab”模块,以查找SIMULINK组件。
现在,“ FindOpenCL”模块提供了导入的目标。
“ FindOpenMP”模块学习了从编译器检测OpenMP版本(规格日期)的方法。
添加了“ FindVulkan”模块。
“ GenerateExportHeader”模块学习了新的“ CUSTOM_CONTENT_FROM_VARIABLE”选项,用于指定包含自定义内容的变量,这些变量将包含在生成的标题中。
“ GNUInstallDirs”模块获得了新的“ GNUInstallDirs_get_absolute_install_dir()”命令。
“ UseJava”模块获取API以“导出” jar目标,以供外部CMake项目使用。请参见“ install_jar_exports”和“ export_jars”功能。
CTEST:
CTest现在支持具有新的“ FIXTURES_SETUP”,“ FIXTURES_CLEANUP”和“ FIXTURES_REQUIRED”测试属性的测试装置。当使用正则表达式或“ --rerun-failed”来限制要运行的测试时,如果任何测试需要夹具,则夹具设置和清除测试将自动添加到执行集中。
“ Ctest_configure()”,“ ctest_build()”,“ ctest_test()”,“ ctest_coverage()”和“ ctest_upload()”命令获得了新的“ CAPTURE_CMAKE_ERROR”选项,以捕获该命令运行变量和避免影响“ ctest(1)”过程的返回码。
CPack:
CPack在OS X上获得了“ productbuild”生成器,该生成器由“ CPackProductBuild”模块配置。
CPack获得了一个新的“ CPACK_PACKAGE_CHECKSUM”变量,该变量可以为每个软件包文件生成一个校验和文件。
当存档格式设置为GNU tar时,“ CPackDeb”模块已学会支持长文件名。参见“ CPACK_DEBIAN_ARCHIVE_TYPE”
“ CPackIFW”模块获得了一个新的“ cpack_ifw_add_package_resources()”命令,以将其他资源包括在安装程序二进制文件中。
“ CPackIFW”模块“ cpack_ifw_configure_component()”和“ cpack_ifw_configure_component_group()”命令获得了一个新的“ USER_INTERFACES”选项,用于向IFW安装程序添加其他页面列表。
“ CPackRPM”模块学会了按需生成debuginfo包。请参考“ CPACK_RPM_DEBUGINFO_PACKAGE”以及每个组件版本。
“ CPackRPM”模块学会了按需生成源rpm(SRPM)软件包。请参见“ CPACK_RPM_PACKAGE_SOURCES”,“ CPACK_RPM_SOURCE_PKG_BUILD_PARAMS”和“ CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX”。
CPack NSIS生成器现在支持“ CPACK_NSIS__INSTALL_DIRECTORY”。这可用于设置组件特定的安装目录。
CPack WIX生成器现在支持“ CPACK_WIX_SKIP_PROGRAM_FOLDER”,以允许在ProgramFiles文件夹外部指定自定义绝对安装前缀。
CPack WIX生成器现在支持“ CPACK_COMPONENT__DISABLED”。这可用于取消选择默认安装的组件。
CPack WIX生成器现在支持Feature元素的“ CPACK_WIX_PATCH_FILE”片段。
CPack WIX生成器现在支持“ CPACK_WIX_ROOT_FEATURE_TITLE”和“ CPACK_WIX_ROOT_FEATURE_DESCRIPTION”,以允许为根元素元素指定自定义标题和描述。
其他:
“ cmake(1)”获得“ -E功能”选项,以提供cmake工具(可用的生成器等)的功能的机器可读(JSON)描述。
添加了新的“ cmake-server(7)”模式,以通过JSON协议向客户端提供有关CMake生成的构建系统的语义信息。目,所有协议都是实验性的,随时可能更改
“ cmake(1)”命令学习了“ --trace-source =“选项。
“ ccmake(1)”学习了支持类似于vim的导航绑定。
“ cmake-gui(1)”具有一个按钮,用于打开Visual Studio生成器和“ Xcode”生成器的生成的项目文件。
不推荐使用和删除的功能:
对于新版本的CMake,我们不再为“ cmake.org”提供Linux i386二进制文件。
Vim支持文件“ cmake-indent.vim”,“ cmake-syntax.vim”和“ cmake-help.vim”已被删除,以支持现在由vim-cmake-syntax项目提供的文件。
支持使用某些编译器来构建CMake本身(CMake仍然支持使用这些编译器来生成其他项目的构建系统):
Visual Studio 7.1和2005-替换VS 2008及更高版本
MinGW.org mingw32被MSYS2 mingw32和mingw64取代
其他变化:
依赖Fortran的扫描仪已学会支持
Fortran子模块的语法。
Vim-cmake-syntax项目中的Vim支持文件“ indent / cmake.vim”和“ syntax / cmake.vim”现已随CMake一起发布。