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

  1. #项目名字  
  2. PROJECT(test_math)  
  3. #头文件目录  
  4. INCLUDE_DIRECTORIES(  
  5. include  
  6. )  
  7. #源文件目录  
  8. AUX_SOURCE_DIRECTORY(src DIR_SRCS)  
  9. #设置环境变量  
  10. SET(TEST_MATH  
  11. ${DIR_SRCS}  
  12. )  
  13. # 设置外部库
  14. SET(LIBRARIES  
  15. libm.so  
  16. )  
  17. # 添加可以执行的文件
  18. ADD_EXECUTABLE(../bin/bin ${TEST_MATH})  
  19. #添加库
  20. ADD_LIBRARY(<NAME> |STATIC|SHARED|MODULE| SOURCE )
  21. #添加链接库 
  22. TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})  


这是一个测试数学函数的程序的CMakeList.txt,"#"后面为注释内容,

第2行指定生成的工程名字为math

第4行指定头文件目录为include

第8行指定源文件目录为src,并将其赋值给环境变量DIR_SRCS

第10行设定环境变量MATH的值为环境变量DIR_SRC的值,此处用于显示如何用环境变量对环境变量进行赋值

第14行将数学函数库赋值给环境变量LIBRARIES,当然,可以不用这个环境变量,而在后面直接使用该库名

第18行用于指定生成文件,将环境变量MATH目录下的所有文件编译生成.../bin目录下的可执行文件bin
第20行指定.../bin/bin执行时的链接库为环境变量LIBRARIES的值libm.so

cpp源文件:
/src/main.c:

  1. #include<stdio.h>  
  2. #include"../include/a.h"  
  3. int main()  
  4. {  
  5.     double b=25.0;  
  6.     double a=0.0;  
  7.     a=get_sqrt(b);  
  8.    
  9.     printf("a is %lf, b is %lf\n",a,b);  
  10.     return 0;  
  11. }  

/src/a.c
  1. #include"../include/a.h"  
  2. double get_sqrt(double var1)  
  3. {  
  4.     return sqrt(var1);  
  5.  

/include/a.h

  1. #ifndef  A_FILE_HEADER_INC
  2. #define  A_FILE_HEADER_INC  
  3. #include<math.h>  
  4.    
  5. double get_sqrt(double var1);  
  6.    
  7. #endif   
将CMakeList.txt文件放在当前目录下,则可以执行
bash命令如下:
cmake .
make

原创粉丝点击