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. 【LeetCode】31. Next Permutation

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  2. Kindeditor JS 富文本编辑器图片上传指定路径

    js //================== KindEditor.ready(function (K) { var hotelid = $("#hotelid").val(); ...

  3. ASP.NET MVC Url中带点号出现404错误的解决方案

    由于项目需求,项目的路由设计如下 config.Routes.MapHttpRoute( name: "Get/Put Sku", routeTemplate: "api ...

  4. VS2015 使用

    1,使用vs2015时,首先需要安装DAEMON Tools Lite虚拟光驱:

  5. java基础3

    包装类:

  6. linux upstart启动配置

    程序名.conf放在/etcc/init/目录下# 注释 description "your-server" author "xxx" start on run ...

  7. [河南省ACM省赛-第三届] BUYING FEED (nyoj 248)

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...

  8. Ubuntu 14.04 配置FTP

    配置Ubuntu 14.04的FTP服务,通过Windows远程访问Ubuntu 14.04的同时,可以实现windows和Ubuntu之间的文件交换传输.在多用户环境下,每一个用户都可以通过自己的帐 ...

  9. sql优化--in和exists效率

    系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists 修改方法如下: in的SQL语句 SELEC ...

  10. spring Bean的三种注入方式

    1.构造函数注入: 构造函数的注入方式分为很多种 (1)普通构造函数,空参数的构造函数 <bean id="exampleBean" class="examples ...