1.概述
本人一直对OpenGL的3d渲染很感兴趣,但是苦于自己一直是Android开发,没有机会接触这方面的知识。就在最近吗,机会来了,以前一个做3D渲染的同事要离职,而公司暂时又招不到合适的人,而我懂点jni和C++,所以就先拉过来凑数了。但是一旦投入咱们就得好好的整一把。所以想先熟悉学习下Cmake的构建工具,因为接手到的项目jni部分使用CMake辅助构建的,所以学好Cmake构建工具是很有用的。而且渲染基本使用的都是C/C++,所以我觉得C/C++不能没有Cmake,就如Android不能没有Gradle.本文主要是介绍在windows上搭建CMake的构建环境并基于MinGW编译工具编译跑通一个C++程序,并且提供给读者学习CMake的方法。并鼓励读者那能够使用博客的方式将自己的理解记录下来,否则过一段时间就忘了,本文的最重要的目的也是防止自己忘掉。故记录一下。
2.环境准备
2.1 安装编译工具
如果咱们使用的是Linux学习CMake,需要先安装gcc,make工具,以Ubuntu为例,安装的命令如下所示:
sudo apt install gcc g++ make
本文所使用的环境是Windows所以我们也需要先安装编译工具,本文使用的MinGW工具。这个工具可以使我们像操作Linux那样在Windows的命令行为所欲为,下载地址为:MinGW工具下载地址 下载界面如下所示:
下载完成后解压到你想放的目录:比如我放在了下面的路径:
C:Program Files (x86)w64devkit
然后,找到刚才解压文件的bin目录,我的是:
C:Program Files (x86)w64devkitbin
配置到环境变量:
配置完后打开命令行CMD验证下,是否成功,如下图所示:
输入Linux命令ls
如果没有报错就表示配置成功了。
2.2 安装CMake
如果是Ubuntu,安装CMake只需要运行下面的命令即可:
sudo apt install cmake
假如我们使用的是windows,需要去CMake的官网下载安装包,CMake工具下载地址下载的页面如下:
下载成功后点击安装,这里需要注意的是:当安装的引导页面中弹出选项时,为了方便,咱们需要勾选上下图中的选项,这个选项会将CMake工具添加到环境变量,方便我们全局使用
安装完成后检验下是否安装成功,在cmd命令行输入命令: cmake --version
如果能出现上图中的信息就表示Cmake工具配置成功了
3.编译一个示例程序
在CMake官网,其实给我们准备了练习CMake工具的练习题,我们只要下载下来,跟着官网文档一步步做就行了。CMake官网教程地址 ,我们打开这个地址页面如下所示:
下载完解压后会得到一个目录,如下所示:
每个Step就代表一个练习,例如打开Step1如下:
这时候我们打开里面的CmakeLists.txt发现里面有一些步骤,我们只要按照这些步骤和官方文档操作,就能编译出我们想要的C/C++产物,文件打开后页面如下:
我们跟随这个步骤修改一个例子并运行试试:
首先我们修改CMakeLists.txt中的内容如下所示:
# TODO 1: Set the minimum required version of CMake to be 3.10
cmake_minimum_required(VERSION 3.10)
# TODO 2: Create a project named Tutorial
project(Tutorial)
# TODO 7: Set the project version number as 1.0 in the above project command
# TODO 6: Set the variable CMAKE_CXX_STANDARD to 11
# and the variable CMAKE_CXX_STANDARD_REQUIRED to True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# TODO 8: Use configure_file to configure and copy TutorialConfig.h.in to
# TutorialConfig.h
# TODO 3: Add an executable called Tutorial to the project
# Hint: Be sure to specify the source file as tutorial.cxx
add_executable(Tutorial tutorial.cxx)
# TODO 9: Use target_include_directories to include ${PROJECT_BINARY_DIR}
然后我们修改tutorial.cxx
文件中的对应步骤内容:
// A simple program that computes the square root of a number
#include
//#include // TODO 5: Remove this line
#include
#include
// TODO 11: Include TutorialConfig.h
int main(int argc, char* argv[])
{
if (argc < 2) {
// TODO 12: Create a print statement using Tutorial_VERSION_MAJOR
// and Tutorial_VERSION_MINOR
std::cout