Windows搭建CMake学习环境

文章目录

  • MinGW
    • Bug及解决
  • CMake
  • CMake学习环境
    • 目标
    • step1:创建文件
    • step2:设置构建工具链
    • step3:使用Clion编译
    • step4:使用命令行编译
    • 坑1:Clion不认CMake
    • 坑2:命令行构建报错找不到nmake

最近工作中要开始写C了,我这个非科班混子,C语言小白也要搭C语言环境了 >_< 。关于GNU/MinGW/GCC/CMake的关系,可以参考这位大佬的帖子:https://zhuanlan.zhihu.com/p/448884264

MinGW

下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/

下载这个:

Windows搭建CMake学习环境_第1张图片
我是64位Windows,用这套选项:

Windows搭建CMake学习环境_第2张图片

32位的可以用这套:

Windows搭建CMake学习环境_第3张图片

Bug及解决

我的安装过程中出错了:

Windows搭建CMake学习环境_第4张图片

说明本地网络下载不了安装文件,要去下离线包安装。

参考在线安装包的配置下载离线安装包,我上面的选项是这个

Windows搭建CMake学习环境_第5张图片

下载的离线安装包版本就是这个

Windows搭建CMake学习环境_第6张图片

下载之后解压到文件夹,去添加Path环境变量:

Windows搭建CMake学习环境_第7张图片

(上面的一行就是CMake安装程序给添加的Path,我是在下载和解压MinGW离线包时候安装的CMake)

安装完毕后进入命令行检查:

PS D:\BaiduNetdiskDownload> gcc --version
gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

PS D:\BaiduNetdiskDownload>

CMake

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

Win64有安装引导文件可以下,建议下载这个,不用自己配环境变量了。

Windows搭建CMake学习环境_第8张图片

安装时候记得让引导程序帮我们加Path环境变量,忘记选的话需要自己去加哦:

Windows搭建CMake学习环境_第9张图片

安装完毕后进入命令行检查:

PS D:\BaiduNetdiskDownload> cmake --version
cmake version 3.27.0-rc4

CMake suite maintained and supported by Kitware (kitware.com/cmake).
PS D:\BaiduNetdiskDownload>

CMake学习环境

上面的基础步骤只是确保了本机上装有CMake,像我这种小白是希望在Windows机器上学习CMake的。要开始学习CMake,还需要做一些额外工作。

关于CMake的学习本小白的观点:CMake属于一个操作性强,理论性弱的知识领域,学习起来应该以实操为主。众所周知,最好的实操教学贴往往在官方教学,问题是官方教学是英语写的,阅读成本比较高,可以找下国内大佬对官方示例的时间,这是我在看的系列:https://juejin.cn/post/6844903557183832078。CMake的优质教学贴很多,建议是配好学习环境后跟着一个系列动手实操,一两天之内学会大概用法都是可能的。

目标

环境搭建目标是对于教程中第一章的示例,能用Clion集成CMake构建出Tutorial.exe,并能用命令行构建出Tutorial.exe。

前置:Clion和CMake下载完毕

最终效果:

Windows搭建CMake学习环境_第10张图片

Clion生成的文件和命令行生成的文件在不同的文件夹,不冲突。

step1:创建文件

使用Clion打开项目文件夹,文件夹内有三个文件

Windows搭建CMake学习环境_第11张图片

三个文件是上面教程贴步骤1的教学文件,文件每一行的意思可以去看教程,此处只贴一下内容:

# CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(Tutorial)

# The version number
set(Tutorial_VERSION_MAJOR 1)
set(Tutorial_VERSION_MINOR 0)

# Configure a head file to pass same of the CMake settings to the source code
configure_file(
        "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
        "${PROJECT_BINARY_DIR}/TutorialConfig.h"
)
# add the binary tree to the search path for include files so that we will find TutorialConfig.h
include_directories("${PROJECT_BINARY_DIR}")

add_executable(Tutorial tutorial.cxx)
// tutorial.cxx
#include 
#include 
#include 
#include "TutorialConfig.h"

int main (int argc, char* argv[]) {
    if (argc < 2) {
        fprintf(stdout,"%s Version %d.%d\n",
                argv[0],
                Tutorial_VERSION_MAJOR,
                Tutorial_VERSION_MINOR);
        fprintf(stdout,"Usage: %s number\n",argv[0]);
    }
    double inputValue = atof(argv[1]);
    double outputValue = sqrt(inputValue);
    fprintf(stdout,"The square root of %g is %g\n",
            inputValue, outputValue);
    return 0;
}
// TutorialConfig.h.in
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

step2:设置构建工具链

Clion有时会自动弹出构建工具链(Toolchains)的设置窗口,没弹出的话可以去File -> Settings -> Build, Exception, Deployment -> Toolchains里手动设置。一共需要设置两项,分别是上面MinGW和CMake的安装位置:

Windows搭建CMake学习环境_第12张图片

熟悉Jetbrian产品的小伙伴应该有经验,即使不设置这些编译工具,Jetbrian IDE也会集成一个默认版本。但是建议还是设置一下

然后设置一下CMake的构建选项:

Windows搭建CMake学习环境_第13张图片

step3:使用Clion编译

Windows搭建CMake学习环境_第14张图片

step4:使用命令行编译

执行命令cmake -G "MinGW Makefiles" .生成Makefile(为什么不用cmake .,详见坑2内容)

PS D:\proj\cmake-tutorial\my-tutorial> cmake -G "MinGW Makefiles" .
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument  value or use a ... suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is GNU 8.1.0
-- The CXX compiler identification is GNU 8.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Program Files/mingw-w64-v8.0.2/mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files/mingw-w64-v8.0.2/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/proj/cmake-tutorial/my-tutorial
PS D:\proj\cmake-tutorial\my-tutorial>

这些是新生成的文件,以及新生成的Makefile

Windows搭建CMake学习环境_第15张图片

执行命令make编译exe文件

PS D:\proj\cmake-tutorial\my-tutorial> make
[ 50%] Building CXX object CMakeFiles/Tutorial.dir/tutorial.cxx.obj
[100%] Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
PS D:\proj\cmake-tutorial\my-tutorial> 

生成的exe文件:

Windows搭建CMake学习环境_第16张图片

坑1:Clion不认CMake

我上面第一次下载的CMake版本是3.27,版本太新了,提示需要下载3.25及以下版本。

这时如果只想在Clion里构建,建议选择Clion给我们提供的默认CMake,如果还想在命令行构建,需要去下一个3.25版本的安装包。下载CMake 3.25.3并安装之后,再去Clion中配置我们自己的CMake,就一切正常了。

坑2:命令行构建报错找不到nmake

Clion可以构建,但是使用命令行执行会报错:

PS D:\proj\cmake-tutorial\my-tutorial> cmake .
-- Building for: NMake Makefiles
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument  value or use a ... suffix to tell
  CMake that the project does not need compatibility with older versions.


CMake Error at CMakeLists.txt:2 (project):
  Running

   'nmake' '-?'

  failed with:

   系统找不到指定的文件。


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "D:/proj/cmake-tutorial/my-tutorial/CMakeFiles/CMakeOutput.log".
PS D:\proj\cmake-tutorial\my-tutorial>

查看CMakeOutput.log文件,只有一行内容:

The system is: Windows - 10.0.22621 - AMD64

参考这篇博文:https://blog.csdn.net/qq_naruto/article/details/121437521,并回顾一下我们在Clion中设置了CMake的Toolchain为MinGW,猜测这里的原因是CMake默认构建工具中需要nmake,而我们装的是构建工具是MinGW,里面没有nmake,需要给CMake显示指定的Generator。

经研究,使用命令cmake -G "MinGW Makefiles" .即可指定工具为MinGW,正常生成Makefile,与参考博文中使用GUI修改生成器效果一致。

你可能感兴趣的:(C语言学习,学习,c语言,c++)