第三方库/工具之(一)CMake工具

关注微信公众号“池边小树”~~获取更多分析~~(文末二维码~~)

1 CMake简介

在程序开发过程中,我们要用到许许多多的第三方库,这些第三方库往往需要CMake编译成当前系统对应的工程。

CMake是一个构建C++代码的跨平台工具。它能够搜索你的平台环境,然后生成平台上用于Build的文件。在Windows上安装了Visual Studio,它就能够帮助你生成.sln和.vcxproj文件。如果在Linux上,能够帮助你生成Makefile文件。在MAC OS上,能够帮助你生成xcode项目文件。利用这些文件,就可以在本地编译、链接文件。生成这些项目,solution文件的输入信息,就是一套自己编写的和平台无关的配置文件,一般使用CMakeLists.txt文件。(此处我们仅总结在Windows上的使用)

1.1 CMake的下载及安装

(1)下载

官网下载地址:https://cmake.org/download/

下载.Zip文件即可,本文下载的是v3.12.4版本。(若需要该版本,也可在 https://download.csdn.net/download/xingyuzhengtu/10818412上下载),如下图。

(2)解压

下载后直接解压,在解压后文件目录的bin目录下,可以看到cmake.exe。如下图。

(3)设置环境变量

在“计算机-属性-高级系统属性-高级-环境变量”中,将解压后的bin目录的路径添加到Path系统变量中。

1.2 CMake使用

下面通过一个简单的HelloWorld的程序讲解CMake命令行的简单使用。

(1)编写一个Hello World程序,凡在Main.cpp中

#include <iostream>

using namespace std;

int main() {
  cout<<"Hello World"<<endl;
  return 0;
}

(2)编写一个CMakeLists.txt文件,放在CPP文件的同目录下(项目CPP源文件的根目录)

cmake_minimum_required (VERSION 2.6)
project (HelloWorld)
add_executable (HelloWorld Main.cpp)

如下图

(3)运行CMake

打开一个命令行,到CMakeLists.txt所在路径下,输入下面命令(注意有个“.”)

make .

输出一下结果:

在CMakeLists.txt所在路径下生产了工程文件,如下图

接下来就可以通过VS来生成项目了。

1.3 CMake-gui.exe的使用

CMake还为Windows开发者提供了界面版的小工具。具体的用法如下:

(1)双击打开cmake-gui.exe,选择源代码路径和要生成目标路径

其中,

  • “Where is source code”行的Browser Source,加载源码所在目录。
  • “Where to build the binarys行的Browser Build,加载源码所在目录下的build目录,生成了项目文件就在这里”

(2)点击configure,选择要生成的项目类型

(3)点击Generate完成生成。

2 CMakeLists.txt文件

在这里只对CMakeLists.txt文件进行简单介绍,详细教程参考官方教程:https://cmake.org/cmake-tutorial/

2.1 单个源文件的编译

如果你的项目只有一个源文件main.cpp,那么只需要在同一个目录下新建一个名为CMakeLists.txt的文件,并添加下面的两行代码即可。

cmake_minimum_required(VERSION 2.8)
add_executable(Main main.cpp)

如果需要添加编译选项,可以通过下面的方法:

cmake_minimum_required(VERSION 2.8)
add_definitions("-Wall -std=c++11") # <= 新增的编译选项
add_executable(Main main.cpp)

2.2 单目录多源文件的编译

假设一个项目中有3个文件,如下图。

代码如下:

//------------------------fun1.CPP
#include <iostream>
using namespace std;
void fun1()
{
	cout<<"fun1"<<endl;
}

//------------------------fun2.CPP
#include <iostream>
using namespace std;
void fun2()
{
	cout<<"fun2"<<endl;
}

//------------------------Main.CPP
#include <iostream>
using namespace std;
void fun1();
void fun2();
int main()
{
	fun1();
	fun2();
	cout<<"Hello World"<<endl;
	return 0;
}

CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 2.8)
project(HelloWorld1)
add_executable(Main
  Main.cpp
  fun1.cpp
  fun2.cpp
)

2.3 多目录程序的编译

假设文件结构如下图所示,其中fun1目录中包含一个fun1.CPP,fun2目录中包含一个fun2.CPP文件。

(1)方法一---整个项目仅编写单个CMakeLists.txt文件

CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 2.8)
project(HelloWorld1)
add_executable(Main
  Main.cpp
  fun1/fun1.cpp
  fun2/fun2.cpp
)

(2)方法二--每个目录编写一个CMakeLists.txt文件

CMakeLists.txt文件内容如下:

#fun1/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_library(Fun1 STATIC
  fun1.cpp
)

#fun2/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_library(Fun2 STATIC
  fun2.cpp
)

cmake_minimum_required(VERSION 2.8)
project(HelloWorld1)
add_subdirectory(Fun1)
add_subdirectory(Fun2)
add_executable(Main Main.cpp)
target_link_libraries(Main Fun1 Fun2)

直接在Main.cpp所在目录执行“cmake .”即可。

参考:

[1] https://blog.csdn.net/liyuebit/article/details/77092723 <windows 下cmake的安装+使用 教程>

[2] https://blog.csdn.net/zhangyiant/article/details/51289404 <cmake在Windows上的使用>

[3] https://blog.csdn.net/gg_18826075157/article/details/72780431 <【C/C++】从零开始的cmake教程>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值