cmake实践笔记

概述

camke是一款工程构建工具。
特点:
1、开放源码,使用类BSD许可发布
2、跨平台,可生成native编译配置文件,在linux下生成makefile。
3、简化编译构建过程和编译过程。 camke的工具链非常简单:cmake+make
清理构建结果可用make clean 。

初试cmake

PROJECT(projectname [CXX] [C] [Java])
1、指定项目名称,并指定支持的工程语言(默认包含所有语言)。
2、隐式定义了两个cmake变量:PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR。内部编译,所以就是所在目录。

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
可显示定义变量。
例如:
SET(SRC_LIST main.c t1.c t2.c)

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”
…)

向终端输出用户定义的信息

ADD_EXECUTABLE(hello ${SRC_LIST})
生成相关源文件的可执行文件。${}来引用变量.

cmake基本语法

1,变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名
2,指令(参数 1 参数 2…)
3,指令是大小写无关的,参数和变量是大小写相关的。但,推荐你全部使用大写指令

外部构建

即建一个build文件夹,在文件夹里面cmake …
通过外部编译进行工程构建,HELLO_SOURCE_DIR 仍然指代工程路径,即
/backup/cmake/t1
而 HELLO_BINARY_DIR 则指代编译路径,即/backup/cmake/t1/build

其他语法

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

可执行二进制的输出路径为 build/bin 和库的输出路径为 build/lib.

如何安装

安装目录的选择:
指定CMAKE_INSTALL_PREFIX,默认为/usr/local
使用方法:cmake -DCMAKE_INSTALL_PREFIX=/usr .
安装命令
make install (在make操作后进行)
CMakeLists的编写
INSTALL 指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。
(其实就是复制功能,将指定的文件、程序、脚本复制到指定目录下)
例如:
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)

五、静态库和动态库构建

ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)

其中
SHARE :动态库
STATIC :静态库
MODULE:在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待
要点:
如何通过 ADD_LIBRARY 指令构建动态库和静态库。
如何通过 SET_TARGET_PROPERTIES 同时构建同名的动态库和静态库。
如何通过 SET_TARGET_PROPERTIES 控制动态库版本
最终使用上一节谈到的 INSTALL 指令来安装头文件和动态、静态库。

六、如何使用外部共享库和头文件

INCLUDE_DIRECTORIES(/usr/include/hello)包含头文件
TARGET_LINK_LIBRARIES(main libhello.a) 链接到静态库
TARGET_LINK_LIBRARIES(main libhello.so) 链接到动态库

七、cmake常用变量和常用环境变量

变量引用
${}进行变量,IF语句中除外。
变量定义
SET指令
常用变量
见cmake实践

调用环境变量的方式
$ENV{NAME}指令就可以调用系统的环境变量
设置环境变量的方式是:SET(ENV{变量名} 值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值