CMake学习笔记(一):工程的新建和如何将源文件生成二进制文件
cmake是我们在工作过程中比较常见的一个工具,该系列文章是自己用来学习的笔记。目前只是记录下自己学习cmake的过程中的一些重要的知识点,其是以项目需求为导向并非完整的cmake的学习路线和系统,同样也并非适合所有的人。
1.生成一个可执行文件
当我们写好一个代码文件的时候我们想去验证代码就需要通过编译器把我们的代码编译成一个可执行文件,我们当然可以使用编译命令去生成可执行文件;但是这个只是针对于一个cpp,当我们的功能稍微复杂些的时候,需要包含多个cpp的时候,使用命令就显得太繁冗了。所以我们这里就可以直接使用cmake。我们首先新建文件夹lession1,然后再文件夹下新建如下的文件(文件夹暂时先不创建):CMakeLists.txt ,add.cpp ,div.cpp ,head.h ,main.cpp ,mul.cpp ,sub.cpp
上述文件中的内容如下:
add.cpp:
#include <iostream>
#include "head.h"
int Add(int a,int b){
return a+b;
}
div.cpp:
#include <iostream>
float div(float a,float b){
if(0 == b){
std::cout<<"Erro denominator is zero\n";
return -1;
}
return a / b;
}
head.h:
#ifndef _HEAD_H
#define _HEAD_H
int Add(int a,int b);
int Sub(int a,int b);
int Mul(int a,int b);
float div(float a,float b);
#endif
mul.cpp:
#include <iostream>
int Mul(int a,int b){
return a*b;
}
sub.cpp:
#include <iostream>
int Sub(int a,int b){
return a-b;
}
main.cpp:
#include<stdio.h>
#include "head.h"
int main()
{
int a = 20;
int b = 12;
printf("a = %d,b = %d\n",a,b);
printf("a + b = %d\n",Add(a,b));
printf("a - b = %d\n",Sub(a,b));
printf("a * b = %d\n",Mul(a,b));
printf("a / b = %f\n",div(a,b));
}
这里我们只是简单的把加减乘除分别放到四个不同的app里面,然后再head.h里面声明,在main.cpp里面使用。现在我们需要使用cmakelists.txt把这几个cpp一起编译成一个可执行的文件:
cmake_minimum_required(VERSION 3.0)#指定最低cmake版本的命令
project("cmake_learn")#定义工程名称
#--------------------------------------------------------------------------------
#add_executabl(可执行文件名 源文件名称1 源文件名称2; ... 源文件名称n)
add_executable(cmake_lession2
div.cpp
mul.cpp;
sub.cpp;
add.cpp
main.cpp
)#定义工程生成一个可执行文件
相关的关键字和功能请参考上述内容,当我们完成上述的文件的内容后,我们再CMakeLists.txt文件的同级目录下新建一个build文件,并且在命令框中进入到build文件中,并执行cmake ../, 这里的../是为了指定到CMakeLists.txt。当我们执行cmake ../后没有报错的情况下我们执行make -j8,或者直接make。这里的-j8是指使用8线程进行编译,但是有些虚拟机没有这么多线程,所以也可以直接执行make。执行完上述步骤后应该是如下的结果:
然后就会生成我们的目标二进制文件cmake_lession2,我们直接执行即可。结果如下: