Windows系统中配置gcc、CMake和Eigen环境

  笔者的笔记本预装了正版的windows,由于空间有限,不想装双系统,但是需要gcc和CMake来编译,所以在Windows 10下配置gcc、CMake和Eigen环境(编译项目需要用到Eigen—一个C++高效的线性代数运算库,下载地址)。

Windows系统中GCC和CMake配置

  1. mingw64工具包里面有gcc编译器。选择适当的版本,可参考链接:mingw64简书

  2. 下载CMake的windows版本:CMake下载

  笔者下的是压缩包形式,解压后得到两个文件夹cmake-3.17.0-rc3-win64-x64mingw64。把这两个文件夹都复制到C:\Program Files文件夹下。复制完成后,系统还不能检测到这两个工具,例如,打开powershell工具输入gcc,报错:

PS C:\Users\PeaSt> g++
g++ : 无法将“g++”项识别为
cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ g++
+ ~~~
    + CategoryInfo          : ObjectNotFound: (g++:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

  因为没有添加系统变量,下面添加环境变量:

  右击我的电脑—属性—高级系统设置—环境变量—双击用户变量的“Path”:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  把C:\Program Files\cmake-3.17.0-rc3-win64-x64\binC:\Program Files\mingw64\bin添加到用户变量中,确定即可。
在这里插入图片描述
重启powershell,输入gcc,发现已经能检测到gcc了,只是因为没有传入要编译的文件,所以有报错,这个问题不大:

PS C:\Users\PeaSt> gcc
gcc.exe: fatal error: no input files
compilation terminated.
PS C:\Users\PeaSt>

编译器用VS Code,因为VS Code和CMake配合较好,有很好的插件可用。
VS Code下载链接

打开VS Code,点击Extension选项:
在这里插入图片描述
搜索、安装C/C++插件:
在这里插入图片描述
再搜索、安装CMake插件:
在这里插入图片描述
再搜索、安装CMake Tools插件:
在这里插入图片描述

再搜索、安装C++ Intellisense插件(智能提示辅助插件):在这里插入图片描述

在VS Code中设置gcc编译器,点击编译器选项:
在这里插入图片描述
在下拉菜单中选择GCC 8.1.0 (路径是刚才复制到C盘中的mingw64中的gcc编译器,路径:C:\Program Files\mingw64\bin\gcc.exe)

当左下角的蓝色条里显示“GCC 8.1.0”时,表示已设置GCC为当前编译器。

下面开始测试GCC及CMake功能:

新建一个测试文件test.cpp,写入:

#include <iostream>
using namespace std;

int main(void){

    cout << "Hello World" << endl;
	return 0;
}

再新建一个CMakeLists.txt,写入:

project(TEST_CMAKE)   #编译项目名为TEST_CMAKE

add_executable(test_cmake test.cpp)    #使用test.cpp源文件编译可执行程序test_cmake.exe

写完后按下保存Ctrl+s即可自动开始编译。

编译成功后会生成build文件夹,并生成Makefile,相当于只要保存写好的CMakeLists.txt文件,VS Code就会自动完成cmake ..这个命令:
在这里插入图片描述
进入包含该Makefile的build文件夹:

cd build

注意,在Windows下make要使用mingw32-make.exe命令而不是make,下面开始make:

mingw32-make.exe

make成功:

PS D:\wincpp\build> mingw32-make.exe
Scanning dependencies of target test_cmake
[ 50%] Building CXX object CMakeFiles/test_cmake.dir/test.cpp.obj
[100%] Linking CXX executable test_cmake.exe
[100%] Built target test_cmake

可见在该build文件夹生成了可执行文件test_cmake.exe:
在这里插入图片描述
执行该可执行文件,成功输出了Hello World:

PS D:\wincpp\build> ./test_cmake.exe
Hello World

Windows下gcc及CMake工具配置成功。

Eigen包引入

在编译项目文件时,创建build文件夹,进入之,运行cmake:

cmake ..

发现报错missing: EIGEN_INCLUDE_DIR

CMake Error at C:/Program Files/cmake-3.17.0-rc3-win64-x64/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
  Could NOT find Eigen (missing: EIGEN_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files/cmake-3.17.0-rc3-win64-x64/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:445 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindEigen.cmake:40 (find_package_handle_standard_args)
  CMakeLists.txt:6 (find_package)

原因是缺少Eigen包,在Eigen官网下载该包后,还需要进行编译才能使用。

下载好Eigen包后,解压进入该文件夹:
在这里插入图片描述
使用VS Code打开该文件夹:
在这里插入图片描述
在上面的测试文件test.cpp中加入#include <eigen/Dense>以引用该库:

#include <iostream>
#include <eigen/Dense>

using namespace std;

int main(void){

    cout << "Hello World" << endl;
    return 0;
}

VS Code中下划线提示错误:
在这里插入图片描述
原因:CMakeLists.txt中为包含其头文件,把eigen总文件夹下面的Eigen文件夹包含进去即可,加入include_directories("D:\wincpp\eigen\Eigen")后保存:

project(TEST_CMAKE)

include_directories("D:\wincpp\eigen\Eigen")
add_executable(test_cmake test.cpp)

发现报错Invalid escape sequence \w

[cmake]  Syntax error in cmake code at
[cmake] 
[cmake]     D:/wincpp/CMakeLists.txt:3
[cmake] 
[cmake]   when parsing string
[cmake] 
[cmake]     D:\wincpp\eigen\Eigen
[cmake] 
[cmake]   Invalid escape sequence \w

原因:上面CMakeLists.txt文件中写入的地址中使用了反斜杠“\”。

解决方法:把上述地址的反斜杠改为正斜杠“/”即可:

project(TEST_CMAKE)

include_directories("D:/wincpp/eigen/Eigen")
add_executable(test_cmake test.cpp)

cmake成功。

下面进入包含test_cmake.exe测试可执行文件的build文件夹,再make加入了#include <eigen/Dense>(引入Eigen头文件)语句的项目:
在这里插入图片描述
进入build文件夹后 运行:

mingw32-make.exe

报错:

D:\wincpp\test.cpp:2:10: fatal error: Eigen/Dense: No such file or directory
 #include <Eigen/Dense>
          ^~~~~~~~~~~~~
compilation terminated.

因为引入头文件<Eigen/Dense>不成功,依然画着红色波浪线:
在这里插入图片描述
把Eigen/删掉即可:
在这里插入图片描述
再次cmake,成功:

PS D:\wincpp\build> mingw32-make.exe
Scanning dependencies of target test_cmake
[ 50%] Building CXX object CMakeFiles/test_cmake.dir/test.obj
[100%] Linking CXX executable test_cmake.exe
[100%] Built target test_cmake

在test.cpp文件中写入Eigen测试代码,创建一个名为matrix1的2*2矩阵,然后分别赋值,在main函数里调用输出:

#include <iostream>
#include <Dense>

using Eigen::MatrixXd;
using namespace std;


void testEigen(void){
    MatrixXd matrix1(2,2);
    matrix1(0,0) = 3;
    matrix1(1,0) = 2;
    matrix1(0,1) = -1;
    matrix1(1,1) = matrix1(0,0) + matrix1(0,1);
    cout << matrix1 << endl;
}

int main(void){

    cout << "Hello World" << endl;
    testEigen();
    return 0;
}

保存后再编译,通过:

PS D:\wincpp\build> mingw32-make.exe
Scanning dependencies of target test_cmake
[ 50%] Building CXX object CMakeFiles/test_cmake.dir/test.obj
[100%] Linking CXX executable test_cmake.exe
[100%] Built target test_cmake

运行该测试文件:

./test_cmake.exe

输出:

PS D:\wincpp\build> ./test_cmake.exe
Hello World
 3 -1
 2  2

可见Eigen库中的矩阵运算相关函数可以成功调用,测试完毕。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值