原文:http://blog.csdn.net/dbzhang800/article/details/6329068
在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式。
这次应该简单看看语法和常用的命令了。
简单的语法
- 注释
# 我是注释
- 命令语法
COMMAND(参数1 参数2 ...)
- 字符串列表
A;B;C # 分号分割或空格分隔的值
- 变量(字符串或字符串列表)
set(Foo a b c) |
设置变量 Foo |
command(${Foo}) |
等价于 command(a b c) |
command("${Foo}") |
等价于 command("a b c") |
command("/${Foo}") |
转义,和 a b c无关联 |
- 流控制结构
IF()...ELSE()/ELSEIF()...ENDIF() WHILE()...ENDWHILE() FOREACH()...ENDFOREACH()
- 正则表达式
部分常用命令
INCLUDE_DIRECTORIES( "dir1" "dir2" ... ) |
头文件路径,相当于编译器参数 -Idir1 -Idir2 |
LINK_DIRECTORIES("dir1" "dir2") |
库文件路径。注意: |
AUX_SOURCE_DIRECTORY( “sourcedir” variable) |
收集目录中的文件名并赋值给变量 |
ADD_EXECUTABLE |
可执行程序目标 |
ADD_LIBRARY |
库目标 |
ADD_CUSTOM_TARGET |
自定义目标 |
ADD_DEPENDENCIES( target1 t2 t3 ) |
目标target1依赖于t2 t3 |
ADD_DEFINITIONS( "-Wall -ansi") |
本意是供设置 -D... /D... 等编译预处理需要的宏定义参数,对比 REMOVE_DEFINITIONS() |
TARGET_LINK_LIBRARIES( target-name lib1 lib2 ...) |
设置单个目标需要链接的库 |
LINK_LIBRARIES( lib1 lib2 ...) |
设置所有目标需要链接的库 |
SET_TARGET_PROPERTIES( ... ) |
设置目标的属性 OUTPUT_NAME, VERSION, .... |
MESSAGE(...) |
|
INSTALL( FILES “f1” “f2”DESTINATION . ) |
DESTINATION 相对于 ${CMAKE_INSTALL_PREFIX} |
SET( VAR value [CACHE TYPE DOCSTRING [FORCE]]) |
|
LIST( APPEND|INSERT|LENGTH|GET| REMOVE_ITEM|REMOVE_AT|SORT ...) |
列表操作 |
STRING( TOUPPER|TOLOWER|LENGTH| SUBSTRING|REPLACE|REGEX ...) |
字符串操作 |
SEPARATE_ARGUMENTS( VAR ) |
转换空格分隔的字符串到列表 |
FILE( WRITE|READ|APPEND|GLOB| GLOB_RECURSE|REMOVE|MAKE_DIRECTORY ...) |
文件操作 |
FIND_FILE |
注意 CMAKE_INCLUDE_PATH |
FIND_PATH |
注意 CMAKE_INCLUDE_PATH |
FIND_LIBRARY |
注意 CMAKE_LIBRARY_PATH |
FIND_PROGRAM |
|
FIND_PACKAGE |
注意 CMAKE_MODULE_PATH |
EXEC_PROGRAM( bin [work_dir] ARGS <..> [OUTPUT_VARIABLE var] [RETURN_VALUE var] ) |
执行外部程序 |
OPTION( OPTION_VAR “description” [initial value] ) |
变量
工程路径
- CMAKE_SOURCE_DIR
- PROJECT_SOURCE_DIR
-
<projectname>_SOURCE_DIR
这三个变量指代的内容是一致的,是工程顶层目录
- CMAKE_BINARY_DIR
- PROJECT_BINARY_DIR
-
<projectname>_BINARY_DIR
这三个变量指代的内容是一致的,如果是in source编译,指得就是工程顶层目录,如果 是out-of-source编译,指的是工程编译发生的目录
-
CMAKE_CURRENT_SOURCE_DIR
指的是当前处理的CMakeLists.txt所在的路径。
-
CMAKE_CURRRENT_BINARY_DIR
如果是in-source编译,它跟CMAKE_CURRENT_SOURCE_DIR一致,如果是out-ofsource 编译,他指的是target编译目录。
-
CMAKE_CURRENT_LIST_FILE
输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_BUILD_TYPE
控制 Debug 和 Release 模式的构建
- CMakeList.txt文件
SET(CMAKE_BUILD_TYPE Debug)
- 命令行参数
cmake DCMAKE_BUILD_TYPE=Release
编译器参数
- CMAKE_C_FLAGS
- CMAKE_CXX_FLAGS
也可以通过指令ADD_DEFINITIONS()添加
CMAKE_INCLUDE_PATH
- 配合 FIND_FILE() 以及 FIND_PATH() 使用。如果头文件没有存放在常规路径(/usr/include, /usr/local/include等),
则可以通过这些变量就行弥补。如果不使用 FIND_FILE 和 FIND_PATH的话,CMAKE_INCLUDE_PATH,没有任何作用。
-
CMAKE_LIBRARY_PATH
配合 FIND_LIBRARY() 使用。否则没有任何作用
-
CMAKE_MODULE_PATH
cmake 为上百个软件包提供了查找器(finder):FindXXXX.cmake
当使用非cmake自带的finder时,需要指定finder的路径,这就是CMAKE_MODULE_PATH,配合 FIND_PACKAGE()使用
CMAKE_INSTALL_PREFIX
控制make install是文件会安装到什么地方。默认定义是/usr/local 或 %PROGRAMFILES%
BUILD_SHARED_LIBS
如果不进行设置,使用ADD_LIBRARY且没有指定库类型,默认编译生成的库是静态库。
UNIX 与 WIN32
- UNIX,在所有的类UNIX平台为TRUE,包括OS X和cygwin
- WIN32,在所有的win32平台为TRUE,包括cygwin
参考
- Cmake Practice --Cjacker
相关推荐
CMake 2.8.3 版本中的选项是配置CMake行为的关键参数。这些选项允许用户根据项目需求定制构建过程。例如: - **CMAKE_BUILD_TYPE**: 指定构建类型,如Debug、Release、RelWithDebInfo或MinSizeRel。 - **CMAKE_CXX_...
1. **命令**:CMake 提供了许多命令,例如 `add_executable` 用于创建可执行文件目标,`add_library` 用于创建库目标,`include_directories` 添加头文件搜索路径,`target_link_libraries` 关联目标与库。每个命令...
### CMake之File命令详解:文件处理命令 CMake 是一个跨平台的自动化构建系统工具,主要用于管理构建过程。在 CMake 中,`file` 命令是用于执行文件系统操作的重要工具之一,它提供了丰富的功能来处理文件读取、...
在构建和编译方面,CMake提供了丰富的选项和参数,比如build_command用于获取用于构建项目的命令,clean_first用于先清理再构建,config用于指定配置类型等。这些命令和选项可以让开发者精确控制构建过程,确保最终...
`cmake` 命令后面跟的是项目源码所在目录,`-G` 参数用于指定要生成的构建系统类型,如 `"NMake Makefiles"` 或 `"MinGW Makefiles"`。在构建目录下执行 `make` 或 `nmake` 将编译并链接程序。 示例二展示了如何...
2. **分隔符**:在CMake中,空格通常用于分隔指令的参数,但某些指令(如`list(APPEND)`)使用冒号`:`或逗号`,`分隔。 3. **字符串处理**:CMake中的字符串可以用单引号`'`或双引号`"`包围,字符串连接使用`+`...
在《CMake手册详解1》中,作者计划详细翻译和解析CMake的官方手册,旨在理解CMake中的各种命令、属性和变量的使用方法。同时,作者也打算通过阅读CMake的源码来深入学习,并分享实际工程中使用CMake的经验。由于...
### CMake基础知识详解 #### CMake概述 CMake是一个跨平台的自动化构建系统,它的全称是Cross-platform Make。作为一款强大的开源工具,CMake主要采用C/C++编写,并支持通过源码编译安装或直接下载预编译的二进制...
### CMake教程详解 #### 一、CMake简介与基本概念 CMake 是一个跨平台的自动构建系统,用于管理软件构建过程。它通过一系列文本配置文件(通常名为 `CMakeLists.txt`)来定义项目的构建规则。这些规则被 CMake ...
### CMake官网基础教程知识点详解 #### 一、引言 CMake作为一款跨平台的自动化构建工具,被广泛应用于各种软件项目的构建过程中。本文基于一份来自CMake官方网站的基础教程,详细介绍了如何从零开始使用CMake来...
- **简单命令行工具**:CMake通过简单的命令行界面来运行,用户可以通过命令行参数指定各种配置选项。 - **直观的配置文件**:CMake使用一种易读易写的文本格式(CMakeLists.txt)来描述构建规则,这种格式相对...
- **cmake_minimum_required**:此命令用于指定CMake所需的最低版本。 - **project**:定义项目名称和其他全局属性。 - **add_executable**:用于创建可执行文件或库。 - **configure_file**:用于配置文件模板并...
**迷你CMake-Qt模板详解** 在开发基于Qt框架的应用程序时,CMake是一个非常流行的构建系统,它能够跨平台管理编译过程。"mini-cmake-qt"项目提供了一个适用于Qt 5和6项目的最小CMake模板,帮助开发者快速搭建项目...
命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。 编译项目: 1. 执行命令cmake .或ccmake .以生成Makefile。 2. 执行命令make以编译项目。 这时,CMake将生成一个名为Demo的可执行文件,该文件...
**命令详解:** ```bash yum -y install make gcc-c++ cmake bison-devel ncurses-devel perl perl-devel ``` - `make`: 用于构建项目的一个工具,能够根据 Makefile 文件自动化地完成项目构建任务。 - `gcc-c++`:...
- 执行`configure`命令进行配置,根据实际情况选择编译参数。 - 配置完成后执行`nmake`命令进行编译。 - 如果一切顺利,QT应该能够成功编译。 3. **集成VS与QT**: - 安装`Trolltech Qt Visual Studio ...
### Linux 下 MySQL 5.5 安装及 CMake 包安装详解 #### 一、前期准备 在开始安装 MySQL 5.5 之前,我们需要确保已经安装了一系列的基础软件包,这些软件包对于后续的安装过程是必要的。下面将详细介绍需要安装的...