cmake通常是通过一个txt文件进行配置编译环境的,无论是总工程目录还是子工程目录下面都需要一个txt文件进行支撑,这个文件名称通常为:CMakeLists.txt,需要配置的东西都可以在这个文件下面进行
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.cmake(例如,FindOSG.cmake)的CMake脚本模块文件,执行其中的内容,以图搜索到指定的外部依赖库头文件和库文件位置。
FIND_PATH( ${var}
NAMES name1 [name2 …]
PATHS path1 [path2 …]
PATH_SUFFIXES suffix1 [suffix2 …] ):
搜索一个包含name1,name2等文件的目录,并将此路径(不包含文件名)保存到var变量中,搜索路径为path1,path2等;此外还可以指定路径的后缀词为suffix1,suffix2等。通常可以使用此命令来确认外部头文件的依赖路径。
FIND_PROGRAM( ${var}
NAMES name1 [name2 …]
PATHS path1 [path2 …]
PATH_SUFFIXES suffix1 [suffix2 …] ):
搜索一个外部的可执行程序,并将结果的全路径保存到var变量中。要搜索的程序名字可能是name1,name2等;搜索路径为path1,path2等;此外还可以指定路径的后缀词为suffix1,suffix2等。
INCLUDE( file ):
在当前文件中包含另一个CMake脚本文件的内容。
INCLUDE_DIRECTORIES( dir1 dir2 … ):
指定编译器搜索头文件的依赖路径,可以添加多个。
INSTALL( TARGETS proj1 proj2
RUNTIME DESTINATION runtime_dir
LIBRARY DESTINATION library_dir
ARCHIVE DESTINATION archive_dir):
这只是此命令的一种语法格式,安装目标工程proj1,proj2等到指定的文件夹。其中,可执行文件安装到RUNTIME DESTINATION指定的runtime_dir目录;动态链接库安装到LIBRARY DESTINATION指定的library_dir目录;静态链接库安装到ARCHIVE DESTINATION指定的archive_dir目录。如果需要安装头文件或者数据文件,则通常使用INSTALL( FILES … DESTINATION … )的形式。
LINK_DIRECTORIES( dir1 dir2 … ):
设置外部依赖库的搜索路径。
MESSAGE( [SEND_ERROR|STATUS|FATAL_ERROR] “text” … ):
在控制台或者对话框输出一行或多行调试信息文本text,枚举量用于控制信息的类型(错误,状态显示,致命错误)。
OPTION( ${var} “text” value ):
向用户提供一个可选项,提示信息为text,初始值为value,并将最终的结果传递到var变量中。在CMake-GUI中它将以配置选项的方式出现。
PROJECT( name ):
设置整个工程的名称为name。
SET( variable value
[CACHE FILEPATH|PATH|STRING|BOOL “text”] ):
定义一个用户自定义变量variable,取值为value。此外还可以使用CACHE关键字,允许用户在CMake-GUI中修改变量的值,修改方式包括文件对话框(FILEPATH),目录对话框(PATH),编辑框(STRING)或者复选框(BOOL),并使用text作为提示信息。
SET_TARGET_PROPERTIES( name PROPERTIES prop value ):
设置名为name的工程的属性,这里主要可选的prop属性包括PROJECT_LABEL, DEBUG_POSTFIX,OUTPUT_NAME等等,value为设置值。
TARGET_LINK_LIBRARIES( name
lib1 lib2 …
[debug|optimized] lib1 lib2 … ):
指定工程name所用的依赖库,并可以使用debug和optimized关键字分别指定DEBUG与RELEASE版本所用的一个或多个依赖库。
分享到:
相关推荐
CMake语法和常用命令。还有具体的案例源码来讲解哦哦。
cmake实践教程.pdf cmake语法简介.pdf
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。cmake编写规则,cmake简单教程.
1. 首先,在构建时,通过build.gradle中path所指定的路径,找到 3. 当应用运行时,首先会执行MainActivity的static代码块的内容
这将在cmake之上添加另一个抽象层以简化项目,并且不需要学习cmake语法。指定的选项(到目前为止)[项目设置] 项目的简单设置,例如: 项目名最低CMAKE版本UseFolders开| 关闭(用于在解决方案文件中使用Visual ...
android studio 对cmake支持以后就需要学习, 简单,实用,快速,高效。对于ndk的开发而言,掌握cmake的语法是非常有必要的
这是本人自己结合很多资料、博客总结出的cmake基本语法,用于组内分享
使用现代CMake语法和传递依赖关系创建跨平台C CMake项目的模板项目
PDF版
详细描述linux平台cmake的使用过程!以及
Cmake生成器,linux版本,cmake所做的...如果不用cmake,那我们为Windows和Linux系统就要写对应的project文件和makefile文件,这无疑是一件繁琐的事,而我们只要编写一次cmake,就可以用在各个平台,而且其语法也简单。
cmake 并不直接编译、构建出最终的可执行文件或库文件,它允许开发者编写一种与平台无关的 CMakeLists.txt 文件来制定整个工程的编译流程,cmake 工具会解析 CMakeLists.txt 文件语法规则,再根据当前的编译平台,...
CMakeLists常用语法,常用变量,常用示例
CMake Pratice是一本讲解CMake基本语法的非常好的入门书籍,本版本拥有详细的目录和笔记,并且有相应注释,非扫描版,可以做笔记
本教程全部采用中文,通过一个例子帮助读者由浅入深逐步理解CMake的语法。者交流,对于模糊的地方局部详细说明。 非常适合完全没接触过CMake以及shell的人从头阅读。 觉得有用的话,希望给个star哦〜 什么是cmake ...
EclipseIDE的CMake插件,支持语法加亮。
cmake基本语法及使用例程
cmake编译方法,语法,十分实用介绍学习方式,从安装入门到精通一步步带你精通
这些配置文件使用简洁的语法,可以定义项目的源文件、依赖项、编译选项等。 多种构建系统支持:CMake可以生成多种构建系统的脚本,包括Makefile、Ninja、Visual Studio等。这使得开发人员可以使用自己熟悉的构建系统...
2.简化的语法:CMake 使用一种简明直观的语法,可以轻松定义项目的目录结构、源文件、依赖项和构建选项。CMake 的语法是基于命令和变量,可以通过编写 CMakeLists.txt 文件来描述项目的配置和构建过程。 3.自动化...