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下的相应编程工具编译时)。

其基本操作流程为:

  1. $> ccmake directory

  2. $> cmake directory

  3. $> 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

  1. $> cmake .

  2. $> make

即可生成可执行文件,在目录/bin下的bin文件,好了运行看其效果是否和所想一样。


补充:

未完待续

见:https://www.cnblogs.com/lidabo/p/7359422.html

cmake 简介-初识相关推荐

  1. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  2. 【转载】CMake 简介和 CMake 模板

    转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...

  3. CMake快速入门01:CMake简介与安装

    目录 1 CMake简介 2 CMake安装 3 CMake基本使用 3.1 实验源文件 3.2 实验CMakeLists.txt 3.2.1 CMakeList.txt命令概述 3.2.2 add_ ...

  4. CMake简介及使用实例

    1.CMake简介 CMake是一个跨平台的建构系统的工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的构建文档makefile或者project文件,描述系统建构的过程 ...

  5. Android NDK开发一 NDK环境搭建及cmake简介

    1 前言 关于NDK的介绍可以查看官方的介绍: https://developer.android.com/ndk/guides/index.html 一句话总结NDK:NDK(Native Deve ...

  6. 01 【Vue简介 初识Vue 模板语法和数据绑定】

    1.Vue简介 1.1官网 英文官网 中文官网 1.2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 ○构建用户界面:把数据通过某种办法变成用户界面 ○渐进式:Vue可 ...

  7. 【Cmake】初识CMake(一)

    业务需要用到CMake和gtest框架,但我此前从来没接触过,就花时间整理了下,做了一个简单的cmake尝试. 前言 我过去使用Java语言,就算用C++也是Dev C++ IDE,很少关注编译与构建 ...

  8. cmake语法【一】

    一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 指定 cmake ...

  9. CMake 条件判断

    CMake简介 CMake 是做什么的? CMake是一套类似于automake的跨平台辅助项目编译的工具. 我觉得语法更加简单易用. CMake的工作流程 CMake处理顶级目录的CMakeList ...

最新文章

  1. python库pickle的用法
  2. WebBrowser
  3. 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
  4. IBM也要开源机器学习平台
  5. 【邮件】生产数据库优化第一步:重建索引
  6. 原码、反码、补码解析,保证一次搞懂
  7. 浏览器和搜索引擎的区别
  8. tomcat架构分析(valve机制)
  9. 联想rd540服务器怎么装系统,联想RD540加显卡BIOS设置
  10. 感染性的木马病毒分析之样本KWSUpreport.exe
  11. ES6 对正则表达式的扩展
  12. 8 iSCSI网络存储服务
  13. (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  14. 美利财务平台数据库架构进阶
  15. 通过ESP32 logging库来启发我们的思维吧~~
  16. 数字电路技术可能出现的简答题_数字电路复习题一简答题
  17. 关于linux文件系统出现脏数据修复的思路
  18. 超定方程组 matlab
  19. java替换特殊字符_Java处理特殊字符替换(正则表达式)
  20. C# monthCalendar

热门文章

  1. SpringMVC框架----MVC 模型
  2. ES termQuery和matchQuery区别浅析
  3. hdu4064 三进制状态压缩 好题!
  4. Rich feature hierarchies for accurate object detection and semantic segmentation(理解)
  5. css_input[checked]复选框去掉默认样式并添加新样式
  6. Android继承AppCompatActivity实现全屏设置
  7. 百度地图——判断用户是否在配送范围内解决方案
  8. JVM内存管理:深入垃圾收集器与内存分配策略
  9. 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
  10. java link 使用_Java数据结构之简单的连接点(link)实现方法示例