写在前面
看了网上许多教程,不过大都看得迷迷糊糊的,我能感觉到有的文章确实写得很好,比较尴尬的是我没领悟到它们的精髓。下面给出我的一些简单配置。
软件准备
MinGW下载与配置
可以到MinGW的官网下面去下载需要的软件包(友情提醒,可能会下载得很慢,不过很安全)
附上官网地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
根据我们MinGW中bin文件的位置进行环境变量的添加
测试是否安装成功:g++ -v("-"前面有个空格别漏掉了)
在输入上面的命令后有对应版本的输出,说明已经配置好了。
CMake下载与配置
可以到CMake的官网上下载需要的软件包,在Windows使用就直接下载.zip后缀的就行,到时候直接解压就完事了。
附上网址:https://cmake.org/download/
根据我们软件解压的路径来添加环境变量
测试是否安装成功:cmake -version("-"前面也有个空格哈)
显示安装的CMake版本是3.17.5,有版本的显示肯定也是配置成功了。
Visual Stdio Code下载与配置
可以参考下这篇文章:
https://www.yuque.com/toogo/ra12lg/oxqywb
不过.json文件咱们就不用管了,这点比较舒服,不过这是我这种菜鸡的做法,熟练之后对.json文件的配置是少不了的。
使用CMake来搭建C/C++开发环境就把下面这些插件装上
①:该插件是对VSCode中C/C++的支持
②:中文支持包,大多数的设置名称都有效地汉化了,翻译质量也还可以
③:这两个就不说了,是对VSCode中的CMake支持
④:
⑤:对VSCode中的代码运行的支持
测试
说明:个人对相关的.json文件都不太熟悉,所以都是利用插件来配置相关的文件,比较简单粗暴,对简单的工程项目是足够用了。
用插件来配置的话需要我们只需要写下CMakeLists.txt就行了。
#要求的最低版本
cmake_minimum_required(VERSION 3.15)
#工程名称
#将xx替换为你想使用的工程名称
project(xx)
#生成可执行文件
#xx是要生成的可执行文件(.exe)文件名, yy是源文件名1,zz是源文件名2
#这种配置适用于源文件在一个文件夹下,且源文件数目不多的情况
add_executable(xx yy.cpp zz.cpp)
这个简单模板对单个源文件和多个同一文件夹下的源文件是适用的。
单个源文件
现在就是一个main.c源文件的状态,注意我红框标识的区域,等会再编写CMakeLists.txt文件后会发生变化。
CMakeLists文件写好了,红框标识的位置还是没变化,现在开始进行Cmake的配置(CMakeLists.txt其实就是告诉CMake按什么样的方式进行配置)。
此时生成了一个build文件
这3个按钮(中间的all不是按钮哈)分别是编译链接、调试、运行。用起来还是很方便,有IDE(集成开发环境)的感觉。
点击编译按钮得到的信息,编译已经完成,现在就可以进行调试或者直接运行了。
运行结果如下:
打上断点,就可以调试查看程序的具体运行状况了。
多个源文件
源文件在同一文件夹下
这种情况常用的CMakeLists的写法就有这两种
工程的结构如下:
具体代码
/*------------------------------main.cpp-----------------------------------*/
#include "hello.h"
int main()
{
hello("Tang");
hello("world");
system("pause");
return 0;
}
/*------------------------------hello.h-----------------------------------*/
#ifndef __HELLO__H
#define __HELLO__H
#include <stdio.h>
#include <stdlib.h>
void hello(const char *str);
#endif
/*------------------------------hello.cpp-----------------------------------*/
#include "hello.h"
void hello(const char *str)
{
printf("\r\nHello, %s\r\n", str);
}
CMakeLists.txt配置
//-------------------------------写法1----------------------------------------
#要求的最低版本
cmake_minimum_required(VERSION 3.15)
#工程名称
project(HelloTest)
#查找当前目录下所有源文件
aux_source_directory(. DIR_SRCS)
#生成可执行文件
add_executable(main ${DIR_SRCS})
//-------------------------------写法2----------------------------------------
#要求的最低版本
cmake_minimum_required(VERSION 3.15)
#工程名称
project(HelloTest)
#生成可执行文件
add_executable(main main.cpp hello.cpp)
这两部分编写完成后,直接进行CMake配置,然后编译链接,运行(调试看情况)。
结果如下:
显然是配置成功了。
不过这里想说一句,大多数情况下CMakeLists的编写还是用写法1比较好,可移植性强,搬到其他工程用可能只改个工程名就行了;写法2可以指定具体编译链接哪些源文件,不过当源文件多了写着就有点麻烦了,而且这种写法不好移植。
源文件不在同一文件夹下
工程结构
这种是在有几个子目录就要再写几个CMakeLists,这个例子中有Hello这个子目录,所以除了顶层的CMakeLists要写外还要在Hello目录下编写一个CMakeLists。
代码还是和源码在同一文件夹下给出的例子一样
这里在头文件包含上还有点问题,可以进行这样的处理:
/*------------------------------main.cpp-----------------------------------*/
#include "Hello\hello.h" //因为是在Hello文件夹下,需要添加一下路径
int main()
{
hello("Tang");
hello("world");
system("pause");
return 0;
}
如果不添加文件夹路径,下面给出这种情况CMakeLists的写法
//-------------------------------Hello文件夹下CMakeLists----------------------------------------
#查找当前目录下的所有源文件
#并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
#生成链接库,命名为HelloLib
add_library(HelloLib ${DIR_LIB_SRCS})
//-------------------------------根目录CMakeLists---------------------------------------
#CMake 最低版本号要求
cmake_minimum_required(VERSION 3.15)
#项目信息,工程名为HelloTest
project(HelloTest)
#引入自己编写的头文件
#头文件的路径根据实际情况添加,我是在根目录下的Hello文件夹下
#大家可以在根目录下添加一个inc文件夹,把头文件放在在文件夹下,这样组织起来很方便
#直接include_directories(inc)是不是挺方便的呢
include_directories(Hello)
#查找当前目录下的所有源文件
#并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
#添加 Hello 子目录
add_subdirectory(Hello)
#指定生成目标,即生成可执行文件test.exe
add_executable(test ${DIR_SRCS})
#添加链接库
target_link_libraries(test HelloLib)
运行结果如下,说明我们的cmake配置没有问题,整个内容就完成了。
总结
配置大概就是这样了,不过里面的内容原理我也不太懂,不过这样配置满足简单的工程需求也足够了哈。
步骤如下:
1、编写源文件和CMakeLists文件
2、“Ctrl + Shift + P”,输入cmake:config(可能输几个字符就有提示了)进行Cmake的配置
3、编译、调试、运行就可以直接点最下方的那些按钮
VSCode自身的设置选项和已添加插件的设置选项都可以去看看,其中的一些设置根据需要的不同也有所不同,分寸自己把握。
更新一波:
发现这篇文章写得很潦草,很多地方都是不必要的,不过倒也没什么大错误,勉强能用。大家学习深入一些后应该会发现我这文章写的很呆,哈哈。
参考文章
https://libaineu2004.blog.youkuaiyun.com/article/details/78995740