`
aigo
  • 浏览: 2635859 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

cmake参数与命令详解

阅读更多

原文: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")

库文件路径。注意:
由于历史原因,相对路径会原样传递给链接器。
尽量使用FIND_LIBRARY而避免使用这个。

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开发手册详解.pdf

    CMake 2.8.3 版本中的选项是配置CMake行为的关键参数。这些选项允许用户根据项目需求定制构建过程。例如: - **CMAKE_BUILD_TYPE**: 指定构建类型,如Debug、Release、RelWithDebInfo或MinSizeRel。 - **CMAKE_CXX_...

    CMake 手册详细讲解.pdf

    1. **命令**:CMake 提供了许多命令,例如 `add_executable` 用于创建可执行文件目标,`add_library` 用于创建库目标,`include_directories` 添加头文件搜索路径,`target_link_libraries` 关联目标与库。每个命令...

    cmake之file命令:文件处理命令

    ### CMake之File命令详解:文件处理命令 CMake 是一个跨平台的自动化构建系统工具,主要用于管理构建过程。在 CMake 中,`file` 命令是用于执行文件系统操作的重要工具之一,它提供了丰富的功能来处理文件读取、...

    CMake手册详解[格式整理+带标签]

    在构建和编译方面,CMake提供了丰富的选项和参数,比如build_command用于获取用于构建项目的命令,clean_first用于先清理再构建,config用于指定配置类型等。这些命令和选项可以让开发者精确控制构建过程,确保最终...

    cmake教程详解

    `cmake` 命令后面跟的是项目源码所在目录,`-G` 参数用于指定要生成的构建系统类型,如 `"NMake Makefiles"` 或 `"MinGW Makefiles"`。在构建目录下执行 `make` 或 `nmake` 将编译并链接程序。 示例二展示了如何...

    cmake实践教程&语法简介

    2. **分隔符**:在CMake中,空格通常用于分隔指令的参数,但某些指令(如`list(APPEND)`)使用冒号`:`或逗号`,`分隔。 3. **字符串处理**:CMake中的字符串可以用单引号`'`或双引号`"`包围,字符串连接使用`+`...

    CMake手册详解1

    在《CMake手册详解1》中,作者计划详细翻译和解析CMake的官方手册,旨在理解CMake中的各种命令、属性和变量的使用方法。同时,作者也打算通过阅读CMake的源码来深入学习,并分享实际工程中使用CMake的经验。由于...

    cmake入门基本介绍

    ### CMake基础知识详解 #### CMake概述 CMake是一个跨平台的自动化构建系统,它的全称是Cross-platform Make。作为一款强大的开源工具,CMake主要采用C/C++编写,并支持通过源码编译安装或直接下载预编译的二进制...

    CMake Tutorial

    ### CMake教程详解 #### 一、CMake简介与基本概念 CMake 是一个跨平台的自动构建系统,用于管理软件构建过程。它通过一系列文本配置文件(通常名为 `CMakeLists.txt`)来定义项目的构建规则。这些规则被 CMake ...

    CMake官网基础教程(demo)

    ### CMake官网基础教程知识点详解 #### 一、引言 CMake作为一款跨平台的自动化构建工具,被广泛应用于各种软件项目的构建过程中。本文基于一份来自CMake官方网站的基础教程,详细介绍了如何从零开始使用CMake来...

    cmake跨平台的自动化构建系统

    - **简单命令行工具**:CMake通过简单的命令行界面来运行,用户可以通过命令行参数指定各种配置选项。 - **直观的配置文件**:CMake使用一种易读易写的文本格式(CMakeLists.txt)来描述构建规则,这种格式相对...

    cmake参考文档

    - **cmake_minimum_required**:此命令用于指定CMake所需的最低版本。 - **project**:定义项目名称和其他全局属性。 - **add_executable**:用于创建可执行文件或库。 - **configure_file**:用于配置文件模板并...

    mini-cmake-qt:适用于Qt 5和6项目的最小CMake模板

    **迷你CMake-Qt模板详解** 在开发基于Qt框架的应用程序时,CMake是一个非常流行的构建系统,它能够跨平台管理编译过程。"mini-cmake-qt"项目提供了一个适用于Qt 5和6项目的最小CMake模板,帮助开发者快速搭建项目...

    超详细的cmake入门教程

    命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。 编译项目: 1. 执行命令cmake .或ccmake .以生成Makefile。 2. 执行命令make以编译项目。 这时,CMake将生成一个名为Demo的可执行文件,该文件...

    CentOS7 源码安装MySQL5.6

    **命令详解:** ```bash yum -y install make gcc-c++ cmake bison-devel ncurses-devel perl perl-devel ``` - `make`: 用于构建项目的一个工具,能够根据 Makefile 文件自动化地完成项目构建任务。 - `gcc-c++`:...

    VTK安装方法(VS2008,QT)

    - 执行`configure`命令进行配置,根据实际情况选择编译参数。 - 配置完成后执行`nmake`命令进行编译。 - 如果一切顺利,QT应该能够成功编译。 3. **集成VS与QT**: - 安装`Trolltech Qt Visual Studio ...

    linux下myql5.5安装详解

    ### Linux 下 MySQL 5.5 安装及 CMake 包安装详解 #### 一、前期准备 在开始安装 MySQL 5.5 之前,我们需要确保已经安装了一系列的基础软件包,这些软件包对于后续的安装过程是必要的。下面将详细介绍需要安装的...

Global site tag (gtag.js) - Google Analytics