词法和语法在开始本节的学习之前,我们先总结一下之前所了解到的CMake基本词法和命令。CMake命令通常使用如下的格式: 1. COMMAND( ARG1 ARG2 … )复制代码命令关键字之后使用括号来包含所有的参数;各个参数之间使用空格或者换行符分隔;而参数通常有以下几种形式:变量,以${MY_VAIRABLE}的形式表达,其储存类型为字符串类型,但是可以根据具体命令的要求自动转换为布尔型、整型或者浮点类型。变量可以出现在字符串中,也可以实现“内省”。变量有用户自定义和系统内置两种,用户自定义变量使用SET命令设置;而系统变量由系统自动赋值,例如${PROJECT_SOURCE_DIR}。枚举量,例如ADD_LIBRARY可以设置要生成的链接库为SHARED或者STATIC,还可以设置为MODULE(插件,可动态调用,但不作为其他工程的依赖),除此之外的赋值都是不能被识别的。值,也就是任意的字符串内容,它可以用来指示要编译的源代码文件名,也可以表达一段文字提示信息,或者表达特定的功能。值可以使用引号进行标识,多数情况下也可以不用。前文中我们已经了解到的命令列举如下,此外这里还简要地介绍了另一些可能在各类CMake工程中遇到的命令及其语法格式。CMake部分命令的语法歌是十分复杂,这里仅仅介绍它的某一种实现形式,建议读者阅读CMake的帮助文档以获取更多信息。括号中为该命令的一个或多个参数项,其中使用“[…]”包含的项表示可忽略项,使用“…|…”分隔的项表示只能选择其中一项。ADD_CUSTOM_COMMAND( TARGET name PRE_BUILD|PRE_LINK|POST_BUILD COMMAND cmd1 [COMMAND cmd2 …] ):为目标工程name添加一个或多个新的自定义的编译规则cmd1,cmd2等,执行时机可以选择编译前,链接前或者编译后。它的作用相当于Visual Studio工程的“Custom Build Step”属性。ADD_CUSTOM_TARGET( name COMMAND cmd1 [COMMAND cmd2 …] ):添加一个名为name的编译目标,并指定一个或多个自定义的命令cmd1,cmd2等。注意ADD_CUSTOM_COMMAND与这个命令的区别:前者是针对一个已有的子工程进行自定义编译规则的设置;后者则是建立一个新的自定义的目标工程,例如一个专用于将已生成文件拷贝到指定文件夹的INSTALL工程;以及与之作用截然相反的UNINSTALL工程。ADD_DEFINITIONS( -DMACRO1 –DMACRO2 … ):添加-D预编译宏定义,可以一次添加多个。ADD_EXECUTABLE( name [WIN32] source1 source2 … ):指定一个名为name的可执行程序工程,其源文件为source1,source2等,此外还可以追加一个枚举量WIN32,表示此程序为Win32程序,使用WinMain作为程序入口。ADD_LIBRARY( name [STATIC|SHARED|MODULE] source1 source2 … ):指定一个名为name的链接库工程,其源文件为source1,source2等,此外还可以指示该工程的生成结果为静态库(STATIC),动态库(SHARED)还是模块(MODULE)。ADD_SUBDIRECTORY( dir ):指示下一级CMake脚本所在位置位于dir子目录。CMAKE_MINIMUM_REQUIRED( VERSION major[.minor[.patch]] ):指示当前脚本所需的CMake版本,不能低于版本号major.minor.patch。CONFIGURE_FILE( infile outfile ):将文件infile复制到outfile的位置,同时执行其中变量的自动配置和更替,即,将infile中所有形同“${VAR}”和“@VAR@”的变量替换为对应的内容,并拷贝到outfile中,而这个新生成的outfile文件也可以在之后的脚本代码中得以使用。FIND_LIBRARY( ${var} NAMES name1 [name2 …] PATHS path1 [path2 …] PATH_SUFFIXES suffix1 [suffix2 …] ):搜索一个外部的链接库文件,并将结果的全路径保存到var变量中。要搜索的链接库文件名字可能是name1,name2等;搜索路径为path1,path2等;此外还可以指定路径的后缀词为suffix1,suffix2等。因此,系统将尝试在path1/suffix1,path1/suffix2,path2/suffix1,path2/suffix2这些目录中搜索名为name1或name2的链接库文件,并将结果(路径和文件名)保存到var中。FIND_PACKAGE( name ):在指定的模块目录中搜索一个名为Find<name>.cmake(例如,FindOSG.cmake)的CMake脚本模块文件,执行其中的内容,以图搜索到指定的外部依赖库头文件和库文件位置。<br><br>FIND_PATH( ${var}<br> NAMES name1 [name2 …]<br> PATHS path1 [path2 …]<br> PATH_SUFFIXES suffix1 [suffix2 …] ):<br>搜索一个包含name1,name2等文件的目录,并将此路径(不包含文件名)保存到var变量中,搜索路径为path1,path2等;此外还可以指定路径的后缀词为suffix1,suffix2等。通常可以使用此命令来确认外部头文件的依赖路径。<br><br>FIND_PROGRAM( ${var}<br> NAMES name1 [name2 …]<br> PATHS path1 [path2 …]<br> PATH_SUFFIXES suffix1 [suffix2 …] ):<br>搜索一个外部的可执行程序,并将结果的全路径保存到var变量中。要搜索的程序名字可能是name1,name2等;搜索路径为path1,path2等;此外还可以指定路径的后缀词为suffix1,suffix2等。<br><br>INCLUDE( file ):<br>在当前文件中包含另一个CMake脚本文件的内容。<br><br>INCLUDE_DIRECTORIES( dir1 dir2 … ):<br>指定编译器搜索头文件的依赖路径,可以添加多个。<br><br>INSTALL( TARGETS proj1 proj2<br> RUNTIME DESTINATION runtime_dir<br> LIBRARY DESTINATION library_dir<br> ARCHIVE DESTINATION archive_dir):<br>这只是此命令的一种语法格式,安装目标工程proj1,proj2等到指定的文件夹。其中,可执行文件安装到RUNTIME DESTINATION指定的runtime_dir目录;动态链接库安装到LIBRARY DESTINATION指定的library_dir目录;静态链接库安装到ARCHIVE DESTINATION指定的archive_dir目录。如果需要安装头文件或者数据文件,则通常使用INSTALL( FILES … DESTINATION … )的形式。<br><br>LINK_DIRECTORIES( dir1 dir2 … ):<br>设置外部依赖库的搜索路径。<br><br>MESSAGE( [SEND_ERROR|STATUS|FATAL_ERROR] “text” … ):<br>在控制台或者对话框输出一行或多行调试信息文本text,枚举量用于控制信息的类型(错误,状态显示,致命错误)。<br><br>OPTION( ${var} “text” value ):<br>向用户提供一个可选项,提示信息为text,初始值为value,并将最终的结果传递到var变量中。在CMake-GUI中它将以配置选项的方式出现。<br><br>PROJECT( name ):<br>设置整个工程的名称为name。<br><br>SET( variable value<br> [CACHE FILEPATH|PATH|STRING|BOOL “text”] ):<br>定义一个用户自定义变量variable,取值为value。此外还可以使用CACHE关键字,允许用户在CMake-GUI中修改变量的值,修改方式包括文件对话框(FILEPATH),目录对话框(PATH),编辑框(STRING)或者复选框(BOOL),并使用text作为提示信息。<br><br>SET_TARGET_PROPERTIES( name PROPERTIES prop value ):<br>设置名为name的工程的属性,这里主要可选的prop属性包括PROJECT_LABEL, DEBUG_POSTFIX,OUTPUT_NAME等等,value为设置值。<br><br>TARGET_LINK_LIBRARIES( name<br> lib1 lib2 …<br> [debug|optimized] lib1 lib2 … ):<br>指定工程name所用的依赖库,并可以使用debug和optimized关键字分别指定DEBUG与RELEASE版本所用的一个或多个依赖库。</name>
您还没有登录,请您登录后再发表评论
cmake实践教程.pdf cmake语法简介.pdf
CMake语法和常用命令。还有具体的案例源码来讲解哦哦。
这是本人自己结合很多资料、博客总结出的cmake基本语法,用于组内分享
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。cmake编写规则,cmake简单教程.
cmake-3.6.3和cmake-3.12.2的源码,可以在linux下编译安装cmake,安装完成之后就可以使用cmake来编译源码了.
编译opencv源码,需要cmake,这里cmake3.13和cmake3.16两个版本都有,我使用cmake3.16编译opencv的cuda加速。
CMake是Kitware公司和一些开源开发者在开发一些工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。项 mục诞生时间是2001年。CMake的流行其实要归功于KDE4的开发,在KDE开发者使用了近10...
cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 ...
PDF版
android studio 对cmake支持以后就需要学习, 简单,实用,快速,高效。对于ndk的开发而言,掌握cmake的语法是非常有必要的
cmake-3.5.1和cmake-3.14.5.zip
详细描述linux平台cmake的使用过程!以及
CMAKE3.6自用
cmake菜谱中文版, cmake practice 很好的cmake入门资料
* 环境变量CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH:可以使用SET命令来设置环境变量CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH。 CMake的优势: *跨平台支持:CMake支持多种平台,包括Windows、Linux、Mac OS等。 *...
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性
Cmake交叉编译环境配置文档 1、设置交叉编译之前,必须在CMake...2、在通知CMake要交叉编译以后,还要告诉CMake到哪个路径下去找库文件,因为在交叉编译的时候CMake是不会自动去系统默认的目录找库文件和头文件的:...
CMake是一个跨平台的安装(编译)工具,可以用简单...这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
通过cmake搭建vs和qt开发环境实例代码, 主要是CMakeLists.txt
现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代...
相关推荐
cmake实践教程.pdf cmake语法简介.pdf
CMake语法和常用命令。还有具体的案例源码来讲解哦哦。
这是本人自己结合很多资料、博客总结出的cmake基本语法,用于组内分享
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。cmake编写规则,cmake简单教程.
cmake-3.6.3和cmake-3.12.2的源码,可以在linux下编译安装cmake,安装完成之后就可以使用cmake来编译源码了.
编译opencv源码,需要cmake,这里cmake3.13和cmake3.16两个版本都有,我使用cmake3.16编译opencv的cuda加速。
CMake是Kitware公司和一些开源开发者在开发一些工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。项 mục诞生时间是2001年。CMake的流行其实要归功于KDE4的开发,在KDE开发者使用了近10...
cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 cmake教程 ...
PDF版
android studio 对cmake支持以后就需要学习, 简单,实用,快速,高效。对于ndk的开发而言,掌握cmake的语法是非常有必要的
cmake-3.5.1和cmake-3.14.5.zip
详细描述linux平台cmake的使用过程!以及
CMAKE3.6自用
cmake菜谱中文版, cmake practice 很好的cmake入门资料
* 环境变量CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH:可以使用SET命令来设置环境变量CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH。 CMake的优势: *跨平台支持:CMake支持多种平台,包括Windows、Linux、Mac OS等。 *...
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性
Cmake交叉编译环境配置文档 1、设置交叉编译之前,必须在CMake...2、在通知CMake要交叉编译以后,还要告诉CMake到哪个路径下去找库文件,因为在交叉编译的时候CMake是不会自动去系统默认的目录找库文件和头文件的:...
CMake是一个跨平台的安装(编译)工具,可以用简单...这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
通过cmake搭建vs和qt开发环境实例代码, 主要是CMakeLists.txt
现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代CMake设计理念和使用.pdf 现代...