问题描述
在windows系统下使用 CMake
+ MSYS2
进行C++开发,但在源码main.cpp
中增加C++11以上的语法后, 使用cmake
编译, 能够生成可执行文件, 但运行和调试时不显示任何输出结果.
源码如下:
#include <iostream>
#include <vector>
int main(int, char**) {
std::vector<int> v{1,2,3}; // 列表初始化, C++11支持的语法
for (auto &&i : v) // ranged-for, C++11支持的语法
{
std::cout << i << std::endl;
}
std::cout << "Hello, world!\n";
}
一开始以为是未指定C++版本的缘故, 但在CMakeLists.txt
中添加如下内容, 未能解决问题.
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
后来发现, 是因为电脑上安装了两个 gcc/g++
, 一个为C:\Strawberry\c\bin\g++.exe(4.9.2)
(以前安装perl时安装的), 另一个为C:\msys64\mingw64\bin\g++.exe(11.2.0)
, 且低版本的gcc/g++
在前.
运行如下命令, 查看g++
的所在的位置和顺序:
where g++
运行如下命令, 查看默认g++
的版本:
g++ --version
解决方法
编辑系统变量和用户变量中PATH
, 将高版本 gcc/g++
的路径移动至低版本之前.
使用CMake
重新编译后,能够正常运行. 运行结果如下: