转:CMake 使用方法
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
CMake 使用方法
CMake的所有的语句都写在一个叫:CMakeLists.txt 的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关 的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。
其基本操作流程为:
- $> ccmake directory 
- $> cmake directory 
- $> make 
其中directory为CMakeList.txt所在目录;
- 第一条语句用于配置编译选项,如VTK_DIR目录 ,一般这一步不需要配置,直接执行第二条语句即可,但当出现错误时,这里就需要认为配置了,这一步才真正派上用场;
- 第二条命令用于根据CMakeLists.txt生成Makefile文件;
- 第三条命令用于执行Makefile文件,编译程序,生成可执行文件;
CMake的执行就是这么简单,其难点在于如何编写CMakeLists.txt文件,下面结合例子简单介绍CMakeLists.txt的编写,看下面这个CMakeLists.txt
- #project name 
- PROJECT(test_math) 
- #head file path 
- INCLUDE_DIRECTORIES( 
- include 
- ) 
- #source directory 
- AUX_SOURCE_DIRECTORY(src DIR_SRCS) 
- #set environment variable 
- SET(TEST_MATH 
- ${DIR_SRCS} 
- ) 
- #set extern libraries 
- SET(LIBRARIES 
- libm.so 
- ) 
- #add executable file 
- ADD_EXECUTABLE(../bin/bin ${TEST_MATH}) 
- #add link library 
- TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES}) 
或者用下面这个CMakeLists.txt
- #project name 
- PROJECT(test_math) 
- #head file path 
- INCLUDE_DIRECTORIES( 
- include 
- ) 
- #source directory 
- AUX_SOURCE_DIRECTORY(src DIR_SRCS) 
- #set environment variable 
- SET(TEST_MATH 
- ${DIR_SRCS} 
- ) 
- #add executable file 
- ADD_EXECUTABLE(../bin/bin ${TEST_MATH}) 
- #add link library 
- TARGET_LINK_LIBRARIES(../bin/bin m) 
这是一个测试数学函数的程序的CMakeLists.txt,"#"后面为注释的内容,CMake的命令全部为大写
第2行指定生成的工程名为test_math
第4行指定头文件目录为include
第8行指定源文件目录为src,并将其赋值给环境变量DIR_SRCS
第10行设定环境变量TEST_MATH的值为环境变量DIR_SRCS的值,此处用于显示如何用环境变量对环境变量进行赋值
第14行将数学函数库赋值给环境变量LIBRARIES,当然,可以不用这个环境变量,而在后面直接使用该库名
第18行用于指定生成文件,将环境变量TEST_MATH目录下的所有文件编译生成../bin目录下的可执行文件bin
第20行指定../bin/bin执行时的链接库为环境变量LIBRARIES的值-libm.so
下面给出源文件
/src/main.c:
- #include<stdio.h> 
- #include"../include/a.h" 
- int main() 
- { 
- double b=25.0; 
- double a=0.0; 
- a=get_sqrt(b); 
- printf("a is %lf, b is %lf\n",a,b); 
- return 0; 
- } 
/src/a.c
- #include"../include/a.h" 
- double get_sqrt(double var1) 
- { 
- return sqrt(var1); 
- } 
/include/a.h
#ifndef A_FILE_HEADER_INC
- #define A_FILE_HEADER_INC 
- #include<math.h> 
- double get_sqrt(double var1); 
- #endif 
将CMakeLists.txt放在当前目录下,执行CMakeLists.txt
- $> cmake . 
- $> make 
即可生成可执行文件,在目录/bin下的bin文件,好了运行看其效果是否和所想一样。
转:CMake 使用方法的更多相关文章
- CMake 使用方法(转)
		CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ... 
- cmake使用方法详解
		cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性 ... 
- CMake 使用方法
		CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ... 
- CMake 使用方法 & CMakeList.txt<转>
		CMake 使用方法 & CMakeList.txt cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的make ... 
- linux cmake安装方法
		linux cmake安装方法 OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake:还有其它一些软件都需要先安装cmake 1.在linux环境下打开网 ... 
- cmake安装方法
		由于Ubuntu14.04的cmake版本为2.8.x,而如果需要cmake3.x版本时,无法生成makefile,有两种方法可以安装cmake3.10.0: 方法1: sudo apt-get in ... 
- 在linux下编译android下的opencv,使用cmake的方法
		#前一篇帖子实验了build_sdk.py来编译opencv,失败了.#本篇尝试使用cmake来编译#感谢这篇帖子提供的指导:https://www.cnblogs.com/jojodru/p/100 ... 
- CMake使用教程
		转自 RichardXG 原文 CMake使用教程 CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMak ... 
- 非常陌生的cmake
		CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ... 
随机推荐
- Swift3.0:Get/Post同步和异步请求
			一.介绍 Get和Post区别: Get是从服务器上获取数据,Post是向服务器发送数据. 对于Get方式,服务端用Request.QueryString获取变量的值,对于Post方式,服务端用Req ... 
- 2、Python特征
			Python特征 Python编程语言中的定位 脚本语言 高阶动态编程语言 简单易学 Python是一种代表简单主义思想的语言.Python的这种伪代码本质是它最大的优点之一.它使你能够专注于解决问题 ... 
- 关于微软C#中的CHART图表控件的简单使用【转】
			最近公司项目要用到Chart图表控件,这是一个比较老的东西了,目前网络上似乎已经不太流行这个控件,但是只要配置了相关的属性,效果还是可以的.前前后后摸索了好久,接下来谈谈这个件控件最重要的几个属性. ... 
- EF和LINQ 调用存储过程
			好久没有更新文章了,最近项目比较忙都没什么时间来分享最近的问题. 今天遇到一个超级傻逼的问题.C#中调用存储过程,自己code也10来年了,这应该是很简单的问题了.今天有2个新的api,一个只有1个参 ... 
- iOS开发-简单工厂模式
			设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ... 
- map练习
			/* 编写程序统计并输出所读入的单词出现的次数 */ /* //代码一:---用map索引实现惊人的简练 #include <iostream> #include <map> ... 
- Idea 自动导入包的*设置99
			作者:Intopass 链接:https://www.zhihu.com/question/35806024/answer/64530300 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ... 
- kaggle预测
			两个预测kaggle比赛 一 .https://www.kaggle.com/c/web-traffic-time-series-forecasting/overview Arthur Suilin• ... 
- zookeeper基础知识整理
			http://blog.csdn.net/pelick/article/details/7269670 http://zookeeper.apache.org/doc/trunk/javaExampl ... 
- Socket请求和Http请求的各自特点、区别及适用场景 (转)
			http://blog.csdn.net/hexinli/article/details/50500316 Socket实现服务器与客户端之间的物理连接,并进行数据传输.主要有TCP/UDP两个协议. ... 
