CMake是一个跨平台的编译工具,类似于automake

安装

# cd cmake-2.8.10.2
# ./bootstrap
# make
# make install

project

project(<projectname> [CXX] [C] [JAVA])

定义工程的名称的和支持的语言。这一行会引入两个变量(HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR)

set

set(VAR[VALUE] [CACHE TYPE DOCSTRING [FORCE]])

显式的定义变量

set(SRC_LIST hello.c)

message

message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

向终端输出用户信息

  • SATUS:输出信息
  • SEND_ERROR:产生错误,生成过程被跳过
  • FATAL_ERROR:立即终止所有cmake过程
message(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})

add_executable

add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)

使用给定的源文件,为工程引入一个可执行文件

add_executable(${PROJECT_NAME} ${SRC_LIST})

举例

project(hello C CXX)

set(SRC_LIST helloworld.c)

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
message(STATUS "This is SOURCE dir "${CMAKE_SOURCE_DIR}) add_executable(${PROJECT_NAME} ${SRC_LIST})

常用变量名

  • PROJECT_NAME:PROJECT 指令定义的项目名称
  • CMAKE_SOURCE_DIR/PROJECT_SOURCE_DIR:工程顶层目录
  • CMAKE_CURRENT_LIST_FILE:这个变量的 CMakeLists.txt 的完整路径
  • CMAKE_CURRENT_LIST_LINE:这个变量所在的行
  • EXECUTABLE_OUTPUT_PATH/LIBRARY_OUTPUT_PATH:最终结果的存放目录

常用指令

include_directories:程序所需头文件的位置

include_directories("./include") 

link_directories:程序所需库文件的位置

link_directories("./lib") 

target_link_libraries:链接库名称

target_link_libraries(${PROJECT_NAME} pthread)
target_link_libraries(${PROJECT_NAME} -lzlog)

:target_link_libraries要放到add_executable后面,不然报如下错误

CMake Error at CMakeLists.txt:11 (target_link_libraries):
Cannot specify link libraries for target "lwm2mclient" which is not built
by this project.

BUILD_SHARED_LIBS:生成的为动态库

SET(BUILD_SHARED_LIBS ON)

ADD_LIBRARY:定义生成的库的名字,以及类型和需要的源文件

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

ADD_LIBRARY(myhello ${SRC_LIST}) //名字不要冲突

# make
[ 50%] Built target hello
Scanning dependencies of target myhello
[100%] Building C object CMakeFiles/myhello.dir/helloworld.o
Linking C static library libmyhello.a

ADD_DEFINITIONS:添加-D定义。使#ifdef ENABLE_DEBUG生效

ADD_DEFINITIONS(-DENABLE_DEBUG ...)

ADD_TEST/ENABLE_TESTING:

ADD_TEST(testname exename arg1 arg2 ...)
ADD_TEST(mytest ./bin/hello)
ENABLE_TESTING()

AUX_SOURCE_DIRECTORY:临时构建源文件列表。发现一个目录下所有源代码文件并将列表存储在一个变量中

AUX_SOURCE_DIRECTORY(dir VARIABLE)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})

CMAKE_MINIMUM_REQUIRED:版本限制

CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)

INSTALL:make install使用

INSTALL(PROGRAMS bin/hello DESTINATION bin)

# cmake -DCMAKE_INSTALL_PREFIX=./demo/ .
# make install
Install the project...
-- Install configuration: ""
-- Installing: /home/thomas/demo/bin/hello

添加gdb调试

# cmake -DCMAKE_BUILD_TYPE=Debug .

cmake简单用法的更多相关文章

  1. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  2. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  3. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  4. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  5. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  6. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  7. TransactionScope简单用法

    记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...

  8. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  9. listActivity和ExpandableListActivity的简单用法

    http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...

随机推荐

  1. 解决IE浏览器没有网络的情况

    计算机能够连接到网络,但是IE浏览器却显示没有网络. 解决方案: 设置 >> IE internet选项: 选择“高级”: 选择“重置”: 勾选“删除个人设置”,点击重置: 重新打开IE, ...

  2. Microsoft VBScript 运行时错误 错误 800a005e 无效使用 Null: Replace

    查看数据库   表的字段里面是否有空的字段. where 字段名 is null

  3. Spring cloud微服务安全实战-4-8Zuul网关安全开发(一)

    安全相关的代码和业务逻辑相关的代码实际上是在一个应用里面的,在这个应用里面,我们需要去,这个应用本身的处理逻辑里面需要去处理令牌和用户信息之间的转换. 然后我们需要去知道认证服务器的地址,这些都是耦合 ...

  4. CentOS7下yum安装Redis

    (1).Redis概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value(键值型)数据库(非关系型数据库),并提供多种语言的API. Redi ...

  5. Ideal 使用帮助手册

    1.设置Ideal启动时选择工作空间 将Reopen last project on starup 取消勾选

  6. 一个php创建webservice,并通过c#调用的真实实例(转)

    https://www.cnblogs.com/sequh/archive/2015/09/18/4819832.html 最近需要用php创建webservice供C#和JAVA来调用,通过3天的搜 ...

  7. 什么是 https ?这应该是全网把 https 讲的最好的一篇文章了

    https://blog.csdn.net/m0_37907797/article/details/102759257

  8. The underlying connection was closed: The connection was closed unexpectedly.

    基础连接已经关闭: 连接被意外关闭. 基础连接已经关闭: 发送时发生错误 防火墙问题.或是杀毒软件,卫士之类的.(360 卸载 )

  9. DSOFramer 控件(转)

    1.Html电子印章.手写签名系统演示:http://www.dianju.com.cn/video.htm在线试用:http://www.dianju.com.cn/websignpiaoju/ht ...

  10. 【C/C++开发】C++库大全

    C++特殊限定符(1)--static 当static来修饰类数据成员时,这个类的所有对象都可以访问它.因为值在内存中持续存在,它可以被对象有效共享.这意味着当一个对象改变static数据成员的值时, ...