1. cmake_minimum_required(VERSION 2.8)           检查cmake的版本,至少为2.8

2. project(helloworld)                                            工程名为helloworld

3. aux_source_directory(.  SRC_LIST)                     查找当前目录下所有的源文件并保存到SRC_LIST变量中

4. include_directories(./include ./abc)                      将./include和./abc加入包含目录列表

5. link_directories(./lib)                                         将 ./lib加入编译器链接阶段的搜索目录列表

6. add_executable(hello  $(SRC_LIST})                  使用SRC_LIST源文件列表里的文件生成一个可执行文件hello

7. add_library(hello STATIC ${SRC_LIST})            使用SRC_LIST源文件列表里的文件生成一个静态链接库libhello.a

8. add_library(hello SHARD ${SRC_LIST})            使用SRC_LIST源文件列表里的文件生成一个动态链接库libhello.so

9. target_link_libraries(hello a b.a c.so)                  将若干库文件链接到目标hello中,target_link_libraries里的库文件的顺序符合gcc/g++链接顺序的规则,即被依赖的库放在依赖它的库的后面,如果顺序有错,链接时会报错。

10. 自定义链接选项

11. 自定义Makefile目标

target_link_libraries(<target> ... <item> ... ...)  其中<target> 必须在当前目录中被add_executable()命令或add_library()命令创建出来。

小型程序的CMakeLists.txt模板:

cmake_minimum_required(VERSION 2.8)   //cmake的最低版本

project(example)    //项目名

include_directories("/usr/include")  //程序所需头文件的位置

link_directories("/usr/lib")   //程序所需库文件的位置

add_executable(example example.cpp)   //编译example.cpp生成example对象文件

target_link_libraries(example gsl)  //链接libgsl.a链接库文件到example对象文件中

target_link_libraries(example gslcblas) //链接libgslcblas.a链接库文件到example对象文件中

12. FIND_PATH(<VAR> name1 [path1 path2 ...]) 该命令在参数path1, path2...指示的目录中查找文件name1并将查找到的路径保存到变量VAR中

13. FIND_LIBRARY  同FIND_PATH类似,用于查找链接库并将结果保存在变量中

Example:在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些头文件以及链接库所在的目录以便生成编译选项。

第一步,在项目的根目录中创建目录cmake/modules/, cmake/modules/下创建文件Findlibxx.cmake,内容如下:

MESSAGE(STATUS "Using budled findlibxx.cmake...")

FIND_PATH(

LIB_XX_INCLUDE_DIR

XX.h

/usr/include/

/use/local/include/

)

//在/usr/lib/ 和/usr/local/lib/目录下,寻找名为xx的链接库,并将结果保存在 LIB_XX_LIBRARIES中

FIND_LIBRARY(

LIB_XX_LIBRARIES NAMES XX

PATHS /usr/lib/  /usr/local/lib/

)

第二步,项目的根目录中的CmakeList.txt

project(main)

cmake_minimum_required(version 2.8)

set(CMAKE_SOURCE_DIR .)

set(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_ROOT}/cmake/modules}

aux_source_directory(. DIR_SRCS)

add_executable(main ${DIR_SRCS})

find_package(XX required)

mark_as_advanced(

LIB_XX_INCLUDE_DIR

LIB_XX_LIBRARIES

)

Cmake常用指令的更多相关文章

  1. CMake学习笔记三:cmake 常用指令

    1 基本指令 1,ADD_DEFINITIONS 向 C/C++编译器添加-D 定义,比如: DD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分割. 如果你的代 ...

  2. cmake 常用变量和常用环境变量查表手册---整理 .

    一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种 ...

  3. cmake 常用变量和常用环境变量查表手册

    cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...

  4. CMake学习笔记二:cmake 常用变量和常用环境变量

    1 cmake 变量引用的方式 使用 ${} 进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过 ${} 取值. 2 cmake 自定义变量的方式 主要有隐式定义和显式定义两种,举一个隐式定 ...

  5. cmake常用工程示例大集合

    1 简单的可执行文件生成工程 1.1 源文件   main.cpp #include <stdio.h> int main(int argc, char *argv[]) { printf ...

  6. CMake学习笔记四-CMake常用命令

    CMake常用命令 PROJECT PROJECT(projectname [CXX] [C] [Java]) 指定工程名称,并可指定工程支持的语言.支持语言列表可忽略,默认支持所有语言 SET ...

  7. linux常用指令

    整理下来的linux常用指令 mount [-t 文件系统] 设备文件名 挂载点挂载命令,一般用于在挂载ISO,或者其他比如U盘等设备时使用,[-t iso9660]为固定格式,可写可不写,非必写项. ...

  8. 走进AngularJs(二) ng模板中常用指令的使用方式

    通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...

  9. mac 终端 常用指令

    开始正式研究ios 应用开发,由于是从C开始学起,所以学习下常用的mac终端指令,方便后续常用操作. mac 终端 常用指令: 1.ls指令 用途:列出文件 常用参数 -w 以简洁的形式列出所有文件和 ...

随机推荐

  1. STM32 Keil查看程序占用ROM和RAM

    1. 编译生成的map文件中code , RO ,RW, ZI 表示内容 Code为程序代码部分 RO-data 表示 程序定义的常量const temp; RW-data 表示 已初始化的全局变量 ...

  2. SDN理解:SDN现状

    目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF -  ...

  3. js 中的 exec( )方法

    JavaScript exec() 方法 JavaScript RegExp 对象 定义和用法 exec() 方法用于检索字符串中的正则表达式的匹配. 语法:RegExpObject.exec(str ...

  4. hdu1033

    #include<stdio.h> #include<string.h> const int MAXN=200; char str[MAXN]; int main() { in ...

  5. 数据库中Schema、Database、User、Table的关系[转]

    数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...

  6. C#中XmlSerializer的内存占用问题

    被XmlSerializer掉坑里了,爬了一晚上才出来. 本来实现一个功能,从数据库中查出一堆数据(比较多,几十万,不过,是分批查出来的),查出来的数据包含了一个XML字符串,代码中对其进行序列化,一 ...

  7. mx51的三个framebuffer,mxc_ipuv3_fb.c分析

    转载:http://blog.csdn.net/jack_a8/article/details/43309169 mx51支持三个framebuffer:fb0, fb1, fb2 /dev/grap ...

  8. SweetTips: 快意灵动的Android提示库!

    此文章是我在简书的文章,自行搬到博客园.简书地址:SweetTips: 快意灵动的Android提示库! 源码及所在DEMO已上传至GitHub:SweetTips,欢迎大家提Bug,喜欢的话记得St ...

  9. C++设计模式-singleton单例模式_new

      class nocopyable { protected: nocopyable(){}; virtual ~nocopyable(){}; nocopyable(const nocopyable ...

  10. vue router 只需要这么几步

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...