cmake 简介-初识
Table of Contents
CMake 使用方法
/src/main.c:
/src/a.c
/include/a.h
补充:
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(LIBRARIESlibm.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) add_definitions("-Wall -lpthread -g") #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
) # set output binary path
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) SET(FS_BUILD_BINARY_PREFIX "Yfs") #add executable file
ADD_EXECUTABLE(${FS_BUILD_BINARY_PREFIX}sqrt ${TEST_MATH}) #add link library
TARGET_LINK_LIBRARIES(${FS_BUILD_BINARY_PREFIX}sqrt ${LIBRARIES})
这是一个测试数学函数的程序的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文件,好了运行看其效果是否和所想一样。
补充:
未完待续
见:https://www.cnblogs.com/lidabo/p/7359422.html
cmake 简介-初识相关推荐
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- 【转载】CMake 简介和 CMake 模板
转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...
- CMake快速入门01:CMake简介与安装
目录 1 CMake简介 2 CMake安装 3 CMake基本使用 3.1 实验源文件 3.2 实验CMakeLists.txt 3.2.1 CMakeList.txt命令概述 3.2.2 add_ ...
- CMake简介及使用实例
1.CMake简介 CMake是一个跨平台的建构系统的工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的构建文档makefile或者project文件,描述系统建构的过程 ...
- Android NDK开发一 NDK环境搭建及cmake简介
1 前言 关于NDK的介绍可以查看官方的介绍: https://developer.android.com/ndk/guides/index.html 一句话总结NDK:NDK(Native Deve ...
- 01 【Vue简介 初识Vue 模板语法和数据绑定】
1.Vue简介 1.1官网 英文官网 中文官网 1.2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 ○构建用户界面:把数据通过某种办法变成用户界面 ○渐进式:Vue可 ...
- 【Cmake】初识CMake(一)
业务需要用到CMake和gtest框架,但我此前从来没接触过,就花时间整理了下,做了一个简单的cmake尝试. 前言 我过去使用Java语言,就算用C++也是Dev C++ IDE,很少关注编译与构建 ...
- cmake语法【一】
一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 指定 cmake ...
- CMake 条件判断
CMake简介 CMake 是做什么的? CMake是一套类似于automake的跨平台辅助项目编译的工具. 我觉得语法更加简单易用. CMake的工作流程 CMake处理顶级目录的CMakeList ...
最新文章
- python库pickle的用法
- WebBrowser
- 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
- IBM也要开源机器学习平台
- 【邮件】生产数据库优化第一步:重建索引
- 原码、反码、补码解析,保证一次搞懂
- 浏览器和搜索引擎的区别
- tomcat架构分析(valve机制)
- 联想rd540服务器怎么装系统,联想RD540加显卡BIOS设置
- 感染性的木马病毒分析之样本KWSUpreport.exe
- ES6 对正则表达式的扩展
- 8 iSCSI网络存储服务
- (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
- 美利财务平台数据库架构进阶
- 通过ESP32 logging库来启发我们的思维吧~~
- 数字电路技术可能出现的简答题_数字电路复习题一简答题
- 关于linux文件系统出现脏数据修复的思路
- 超定方程组 matlab
- java替换特殊字符_Java处理特殊字符替换(正则表达式)
- C# monthCalendar
热门文章
- SpringMVC框架----MVC 模型
- ES termQuery和matchQuery区别浅析
- hdu4064 三进制状态压缩 好题!
- Rich feature hierarchies for accurate object detection and semantic segmentation(理解)
- css_input[checked]复选框去掉默认样式并添加新样式
- Android继承AppCompatActivity实现全屏设置
- 百度地图——判断用户是否在配送范围内解决方案
- JVM内存管理:深入垃圾收集器与内存分配策略
- 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
- java link 使用_Java数据结构之简单的连接点(link)实现方法示例