CMake语法基础入门
来源:互联网 发布:钢铁进出口数据 编辑:程序博客网 时间:2024/06/05 00:47
前言:”作为一个做C++开发的工程师如果不会cmake,听起来就会让人怀疑“,来自mentor。这个星期一直在做公司C/C++ SDK的一个feature的改进,前前后后换了好几次方案,最后经过和mentor谈论商量,最终决定采用Amazon的做法,于是乎开始了搬砖,不停的coding and 修bug,昨天上午基本上完成了这个feature,下午和mentor开始对整个SDK进行编译,测试。一段新的修bug改代码的旅程才刚刚开始。。。。。好在两个人搞了一下午把最后的bug修完。接下来还需要重新写完所有cmake文件来保证跨平台目前的cmake文件我查看了一下只是可以跨win和linux,我认为还是需要添加macOS。当然这些工作都是由我来做。作为一个小白,当然要静下心来学,不然最后自己接下来的工作没法做。。。。
CMake:所有的cpp文件编译的过程都是需要makefile文件,但是不同平台上的make工具确是不一样的,也就是说需要的makefile也不是相同的,当我们开发一个software需要在不同的平台编译,那么我们就需要写不同的makefile来保证可以正确编译,但是这样的工作是非常让人头大的。为了解决software编译跨平台的问题,cmake工具允许developer为每个软件编写一个与平台无关的文件CMakeList.txt来订制整个编译流程,然后根据用户的平台和开发工具来生成正确的makefile和工程文件,如Linux的makefile 和win的vs。
Linux环境下使用CMake生成makefile并编译的流程如下:
1、编写CMake配置文件CMakeList.txt
2、使用cmake PATH或者 ccmake PATH生成makefile(PATH是CMakeList.txt所在的目录)
3、使用make进行编译
编写CMakeList.txt
- #项目名字
- PROJECT(test_math)
- #头文件目录
- INCLUDE_DIRECTORIES(
- include
- )
- #源文件目录
- AUX_SOURCE_DIRECTORY(src DIR_SRCS)
- #设置环境变量
- SET(TEST_MATH
- ${DIR_SRCS}
- )
- # 设置外部库
- SET(LIBRARIES
- libm.so
- )
- # 添加可以执行的文件
- ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
- #添加库
- ADD_LIBRARY(<NAME> |STATIC|SHARED|MODULE| SOURCE )
- #添加链接库
- TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
这是一个测试数学函数的程序的CMakeList.txt,"#"后面为注释内容,
第2行指定生成的工程名字为math
第4行指定头文件目录为include
第8行指定源文件目录为src,并将其赋值给环境变量DIR_SRCS
第10行设定环境变量MATH的值为环境变量DIR_SRC的值,此处用于显示如何用环境变量对环境变量进行赋值
第14行将数学函数库赋值给环境变量LIBRARIES,当然,可以不用这个环境变量,而在后面直接使用该库名
- #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;
- }
- #include"../include/a.h"
- double get_sqrt(double var1)
- {
- return sqrt(var1);
- }
- #ifndef A_FILE_HEADER_INC
- #define A_FILE_HEADER_INC
- #include<math.h>
- double get_sqrt(double var1);
- #endif
- CMake语法基础入门
- jsp入门语法基础
- Swift入门基础语法
- C++入门基础语法
- Swift入门基础语法
- python-入门基础语法
- Scala 基础语法入门
- sql基础语法入门
- python入门基础语法
- python语法基础入门
- Java入门基础语法
- oracle入门基础语法
- java入门(2)--基础语法
- PHP入门最基础语法
- PHP快速基础语法入门
- python3 入门 (一) 基础语法
- PL/SQL基础语法入门
- Python3入门基础语法总结
- MySQL的外键
- Zynq-Linux移植学习笔记之15-用户APP直接访问PL物理地址
- 浅析前端渲染与后端渲染
- YV12转RGB24的计算转换和bmp(dib)文件的显示保存
- API Gateway技术设计
- CMake语法基础入门
- 标准MySQL数据库外的5个开源兼容方案
- Android 高通4.4.4 源码 如何屏蔽Home键
- 生成回文数 --第六届蓝桥杯国赛JAVA C组
- thinkphp导入第三方金山云sdk
- DNS本地解析
- HDU 4417 Super Mario(线段树||树状数组+离线操作 之线段树篇)
- View=android.widget.ZoomButtonsController$Container not attached to window manager
- 项目构建工具Gradle详解