Интеграция MinGW с Visual Studio 2010 (проект Makefile)

Я пытаюсь заставить MinGW (Версия 4.7.2) работать с Visual Studio 2010, чтобы использовать некоторые из новых функций C++11 (к сожалению, я все еще на WindowsXP и не могу использовать Visual Studio 2012). Для начала я создал проект с помощью: Файл -> Новый проект -> Visual C++ -> Общие -> Makefile-Project

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

И я создал make-файл с содержанием:

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

Он прекрасно компилируется, но в редакторе Visual Studios почти все подчеркнуто волнисто-красным. т.е.

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

std::vector -> 'Ошибка: у пространства имен std нет вектора-члена'

std::thread -> 'Ошибка: у пространства имен std нет потока участника'

четное 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 ответа

Решение

Боюсь, вам придется отказаться от ваших попыток заставить эти красные загогули исчезнуть, если вы не отключите их полностью (так что, например, не будут отмечены даже вызовы несуществующих функций).

Причина в том, что Intellisense в Visual Studio использует отдельный интерфейс к компилятору EDG C++ для анализа вашей программы и, возможно, для обозначения недопустимых выражений или выражений красным зацикливанием, а версия, используемая Intellisense в VS2010, (очевидно) не полностью совместима с C++11.

Следовательно, переход на GCC 4.7.2 в качестве компилятора поможет построить ваши программы на C++ 11, но не повлияет на поведение Intellisense.

Если вы хотите полностью отключить красные загогулины, вы можете сделать это, выбрав Инструменты -> Параметры -> Текстовый редактор -> C/C++ -> Дополнительно и установив "Отключить загогулины" на "Истина".

Использование шаблона проекта Makefile, как описано в OP. Я смог заставить работать intellisense редакции VC 2013 & 2015 Community Edition, добавив соответствующие каталоги include в свойства проектов.

  1. Открой Project menu
  2. Выбрать {Project Name} Properties
  3. Открой Configuration Properties
  4. Выбрать VC++ Directories в древовидном меню
  5. Добавить каталоги в Includes Directories раздел

Вы должны добавить каталоги, которые содержат элементы, которые вы хотите прочитать в intellisense. Скажем, я работаю над проектом gtkmm, я бы также включил dlib glibmm, чтобы у Glib::ustrings не возникало трудностей. Даже если glibmm.h не включен непосредственно в мои исходные файлы.

Другие вопросы по тегам