将MinGW与Visual Studio 2010(Makefile项目)集成

4

我正在尝试将MinGW(版本4.7.2)与Visual Studio 2010配合使用,以使用一些新的C++11功能(可悲的是,我仍在使用Windows XP,无法使用Visual Studio 2012)。 为了开始,我创建了一个项目: 文件 -> 新建项目 -> Visual C++ -> 通用 -> Makefile项目

General:
Build Command Line: mingw32-make.exe
Rebuild All Command Line: mingw32-make.exe rebuild all
Clean Command Line: mingw32-make.exe clean all

IntelliSense:
Include Search Path: C:\MinGW\lib\gcc\mingw32\4.7.2\include\c++;C:\MinGW\include;
Assembly Search Path: C:\MinGW\lib\gcc\mingw32\4.7.2;C:\MinGW\lib;
Additional Arguments: -std=c++11

我创建了一个包含以下内容的makefile:

all:
    g++ -std=c++11 -pthread -o Makefile_Test.exe main.cpp

代码可以成功编译,但在Visual Studio编辑器中几乎所有内容都被标记为波浪线红色。比如:

std::vector<std::thread> threads;

std::vector -> '错误:命名空间 std 没有成员 vector'

std::thread -> '错误:命名空间 std 没有成员 thread'

甚至 std::cout << "";

std::cout -> '错误:命名空间 std 没有成员 cout'

但是我当然已经包含了相应的头文件:Visual Studio 甚至可以找到它们(将光标放在 #include 上,按 Ctrl+Shift+G 可以打开头文件)。我的 MinGw 文件夹看起来像下面这样:

+ MinGW
|- bin
|- doc
|- include
|+ lib
 |- gettext
 |+ gcc
  |+ mingw32
   |+ 4.7.2
    |- debug
    |+ include
     |- c++
     |...
    |- include-fixed
    |- install-tools
|- libexec
|- mingw32
|- msys
|- share
|- var

我也尝试过几次删除sdf文件并让Visual Studio从头开始重建它,但所有这些错误都再次出现了。你有什么想法吗?
2个回答

9
我恐怕您必须放弃尝试让那些红色波浪线消失,除非您完全禁用它们(例如,即使对不存在的函数调用也不会被标记)。原因是Visual Studio的Intellisense使用EDG的C++编译器的单独前端来解析您的程序并可能在无效语句或表达式下放置红色波浪线,并且VS2010中Intellisense使用的版本(显然)不完全符合C ++ 11。因此,切换到GCC 4.7.2作为编译器将有助于构建C ++ 11程序,但不会影响Intellisense的行为。如果要完全禁用红色波浪线,可以通过选择“工具”->“选项”->“文本编辑器”->“C / C ++”->“高级”,并将“禁用Squiggles”设置为“True”。

你错了。错误Error: namespace std has no member vector'Error: namespace std has no member cout'显然不属于c++11。我很好奇,当@Constantin像更改IDE编译器这样的常见操作时,Intellisense变得混乱的真正问题是什么。 - Hi-Angel
@Hi-Angel:实质内容没有变化:OP 没有做错什么,问题出在 Intellisense 和 EDG 前端,唯一消除这些波浪线的方法就是完全禁用它们。 - Andy Prowl
如果我是话题发起者,我会尝试直接询问微软公司。首先在微软论坛上提问。如果论坛不能解决问题,那么我会向微软支持团队寻求帮助(当然,前提是@Constantin使用的是授权版本 ;))。最后,我会在这里写下答案。因为目前有3200次浏览,并且我猜所有这些人都很好奇,包括我自己☺。 - Hi-Angel

1
使用像OP描述的Makefile项目模板。我已经能够使VC 2013和2015社区版的智能感知工作,通过将适当的包含目录添加到项目属性中。
  1. 打开“项目菜单”
  2. 选择“{项目名称}属性”
  3. 打开“配置属性”
  4. 在树形菜单中选择“VC ++目录”
  5. 将目录添加到“包含目录”部分
您必须添加包含要读入智能感知的项的目录。比如我正在处理一个gtkmm项目,我还会包括glibmm目录,这样Glib :: ustrings就不会出问题,即使glibmm.h没有直接包含在我的源文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接