Интеграция 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 в свойства проектов.
- Открой
Project menu
- Выбрать
{Project Name} Properties
- Открой
Configuration Properties
- Выбрать
VC++ Directories
в древовидном меню - Добавить каталоги в
Includes Directories
раздел
Вы должны добавить каталоги, которые содержат элементы, которые вы хотите прочитать в intellisense. Скажем, я работаю над проектом gtkmm, я бы также включил dlib glibmm, чтобы у Glib::ustrings не возникало трудностей. Даже если glibmm.h не включен непосредственно в мои исходные файлы.