cmake简单用法
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简单用法的更多相关文章
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
- NSCharacterSet 简单用法
NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串 subst ...
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
- TransactionScope简单用法
记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
随机推荐
- linux安装qt
1.下载run文件 2../运行 3.修改配置文件 sudo gedit /etc/profile 添加如下: port QTDIR=/home/rainbow/zhuxy/soft/Qt5.9.0/ ...
- Python 初级 5 判断再判断(四)
一 .复习 分支:完成测试并根据结果做出判断称为分支. 代码块:一行或放在一起的多行代码 缩进:一个代码行稍稍靠右一点 关系操作符(比较操作符):==, >, >=, <, < ...
- case when 性能优化
背景:性能应该是功能的一个重要参考,特别是在大数据的背景之下!写SQL语句时如果仅考虑业务逻辑,而不去考虑语句效率问题,有可能导致严重的效率问题,导致功能不可用或者资源消耗过大.其中的一种情况是,处理 ...
- Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 (1).KVM虚拟机克隆 KVM虚拟克隆命令virt-clone [选项] 常用选项 ...
- 使用mysqlslap测试MySQL性能
之前介绍过MySQL的性能测试工具sysbench, 这次介绍一个mysql自带的比较简单的性能测试命令mysqlslap. 下面的指令模拟了1000个进程同事连接mysql,并执行100个查询操作, ...
- 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- Clean Code 代码检查清单
注释: 不恰当的信息:注释只应该描述有关代码和设计的技术性信息. 废弃的注释:过时.无关或不正确的注释就是废弃的注释. 冗余注释:注释应该谈及代码自身没提到的东西 糟糕的注释:值得编写的注释,也值得好 ...
- 软件素材---linux C语言:拼接字符串函数 strcat的用例(与char数组联合使用挺好)
[头文件]#include <string.h> [原型] 1 char *strcat(char *dest, const char *src); [参数]: dest 为目标字符串指针 ...
- 在Ubuntu下安装qt
安装qt前的准备: 安装基础开发包,主要gcc,g++等: sudo apt-get install build-essential 1. 使用qt-opensource-linux-x86-5.5. ...
- phaser三个学生做题目
3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...