Как подключить gcc к visual studio
Как с огромным количеством различных версий языка C++ (C++98, C++03, C++11, C++14, C++17, C++20) компилятор понимает, какую из них ему следует использовать? Как правило, компилятор выбирает стандарт языка по умолчанию (часто не самый последний языковой стандарт). Если вы хотите использовать другой стандарт, то вам придется внести изменения в настройки вашей IDE/компилятора. Эти настройки применяются только к текущему проекту. При создании нового проекта вам придется всё делать заново.
Кодовые имена для версий языка С++
Обратите внимание на то, что каждый языковый стандарт имеет название, указывающее на год его принятия/утверждения (например, C++17 был принят/утвержден в 2017 году).
Однако, когда согласовывается новый языковой стандарт, неясно, в каком году удастся его принять, поэтому действующим языковым стандартам присваиваются кодовые имена, которые затем заменяются фактическими именами при доработке стандарта. Например, C++11 назывался c++1x , пока над ним вели работу. Вы можете по-прежнему видеть на просторах Интернета подобные кодовые имена (особенно, когда речь заходит о будущей версии языкового стандарта, у которого еще нет окончательного названия).
Вот сопоставление кодовых имен версий С++ с их окончательными названиями:
Например, если вы видите c++1z , то знайте, что речь идет о стандарте C++17.
Установка стандарта языка С++ в Visual Studio
На момент написания данной статьи, Visual Studio 2019 по умолчанию использует возможности C++14, что не позволяет использовать более новые фичи, представленные в C++17 и в C++20.
Чтобы использовать новый функционал, вам необходимо подключить новый языковой стандарт. К сожалению, сейчас нет способа сделать это глобально — вы должны делать это к каждому проекту индивидуально.
Чтобы использовать новый языковый стандарт в Visual Studio, откройте ваш проект, затем щелкните правой кнопкой мышки по названию вашего проекта в меню "Обозреватель решений" > "Свойства" :
В диалоговом окне вашего проекта убедитесь, что в пункте "Конфигурация" установлено значение "Все конфигурации" . Затем перейдите на вкладку "C/C++" > "Язык" и в пункте "Стандарт языка С++" выберите ту версию языка С++, которую хотели бы использовать:
На момент написания данной статьи, я рекомендую выбрать "Стандарт ISO C++17 (/std:c++17)" , который является последним стабильным стандартом.
Если вы хотите поэкспериментировать с возможностями грядущего стандарта языка C++ — C++20, то вы можете выбрать пункт "Предварительная версия . (/std:c++latest)" . Просто помните, что его поддержка может иметь баги.
Установка стандарта языка C++ в Code::Blocks
Code::Blocks по умолчанию может использовать стандарт C++11. Хорошей новостью является то, что Code::Blocks позволяет устанавливать ваш стандарт языка С++ глобально, поэтому вы можете установить его один раз и сразу на все проекты (а не для каждого проекта в индивидуальном порядке). Для этого перейдите в меню "Settings" > "Compiler" :
Затем на вкладке "Compiler flags" найдите следующие пункты меню:
Отметьте тот пункт, у которого число обозначает ближайший (к текущему) год утверждения стабильной версии и нажмите "ОК" (на вышеприведенном скриншоте этим пунктом является "Have g++ follow the C++17 ISO C++ language standard [-std=c++17]" ).
Примечание: Если вы не нашли в ваших настройках опцию с C++17, то вам следует обновить вашу версию Code::Blocks.
Установка стандарта языка С++ в GCC/G++
В GCC/G++ вы можете прописать соответствующие флаги -std=c++11 , -std=c++14 , -std=c++17 или -std=c++2a , чтобы подключить функционал C++11/14/17/20, соответственно.
Тестирование вашего компилятора
После подключения версии C++17 или выше, вы можете провести тест, который позволит понять, всё ли верно сделано и действительно ли подключена новая версия языка С++. Следующая программа в С++17 должна выполниться без каких-либо предупреждений или ошибок:
Ни для кого не секрет, что Microsoft Visual Studio 2010 представляет собой мощную IDE, которая, помимо всего, позволяет заменять команды сборки проекта проектов путем внесения изменений в .vcxproj файлах. Как выяснилось, можно использовать эту возможность, чтобы заставить Visual Studio собирать проекты с помощью gcc, работающего на другом компьютере под управлением Linux. При этом обращение к gcc на Linux должно происходить по сети, например по ssh. В этой статье мы расскажем вам о проделанном нами эксперименте по такой необычной настройке Visual Studio.
Предположим, у нас есть программа:
Эта программа должна собираться в среде Linux и при помощи gcc. Конечно, это просто пример, на самом деле речь может идти о большом проекте для Linux с сотнями тысяч файлов и налаженной системой сборки на makefile, что не меняет сути предлагаемого решения. Наша задача – обеспечить возможность редактирования кода программы в Visual Studio и использования входящих в ее состав инструментов по анализу кода и других средств.
Для начала сделаем простенький makefile для этой программы:
NAME= test
OBJS= main.o
.SUFFIXES: .cpp
.SUFFIXES: .o
cleanall: clean
rm -rf *.d map dep *
rebuild: cleanall all
@eсho Rebuild done.
$(NAME): $(OBJS)
echo Compiling $(NAME).
g++ -o $(NAME) $(OBJS)
Теперь нужно решить следующую проблему: код должен редактироваться на платформе Windows (Visual Studio), а компилироваться в Linux. Для этого можно использовать виртуальные машины и разделяемыепапки. Например, в хостовой системе Windows можно установить любое средство виртуализации (Oracle VirtualBox или VMware Workstation), затем создать виртуальную машину и установить в ней Linux. В результате появляется возможность одновременно работать как с Windows, так и с Linux. Функция Shared Folders позволяет получить доступ к файлам хостовой ОС Windows из виртуальной машины Linux.
Для VMware Workstation можно настроить shared folders, пробросив, например, D:\proj\ в Linux как папку proj. Тогда из Windows можно редактировать файл программы main.c, расположенный на диске Windows D:\proj\main.c и, при этом, компилировать его, используя gcc, в Linux в папке /mnt/hgfs/proj/.
В Visual Studio можно заменить команды сборки проекта:
• Build – сборка.
• Rebuild – очистка и сборка проекта заново.
• Clean – очистка файлов проекта (удаление всех бинарных файлов).
плюс команда для запуска проекта.
Для среды Linux они будут соответствовать следующим:
• Build: make all
• Rebuild: make rebuild
• Clean: make clean
• Запуск: ./test
sgtatham/putty/download.html) из пакета Putty. Эта утилитка может выполнить одну команду по ssh, при этом корректно перенаправляя ввод/вывод на текущий терминал cmd.
Допустим, Linux в виртуальной машине настроен так, что из Windows к нему можно обращаться по ssh используя IP адрес 192.168.1.8, имя пользователя — user, а пароль — 123456. Тогда, запустив cmd, можно в Windows успешно выполнить команду:
D:\proj\tools>plink -batch -pw 123456 [email protected] pwd
/home/user
Результат работы программы говорит нам о том, что ‘pwd’ выполнилось в домашнем каталоге пользователя user. Это значит, что прямо в cmd можно скомпилировать программку test следующим образом:
Теперь нам остается интегрировать указанный метод в Visual Studio. Для этого, создадим пустой Solution с названием vs_test в каталоге proj. Добавим проект ‘vs_test’ в созданный Solution. Проект должен иметь тип Makefile (все остальные настройки по умолчанию).
В результате получится следующее дерево файлов:
Далее нужно добавить в проект ‘vs_test’ наши makefile и main.c. Для этого следует воспользоваться опцией проекта ‘Add->Existing Item…’. Таким образом получим следующую картину в Solution Explorer:
Далее, при помощи опции ‘Unload project’ выгружаем проект из solution.
Теперь открываем на редактирование файл проекта при помощи опции ‘Edit vs_test.vcxproj’
Теперь при помощи ‘File->New->File…’создаем текстовый файл, и называем его make_vs.props, размещая его в D:\proj\make_vs.props.
Далее, при помощи тэга ‘Import’ включим текст файла make_vs.props в vs_test.vcxproj. Для этого в файле vs_test.vcxproj добавим строку, импортирующую дополнительные настройки проекта из make_vs.props:
В файле make_vs.props мы можем переопределить любые настройки проекта или дописать свои собственные. У нас получился такой файл make_vs.props:
Перезагружаем проект при помощи ‘Reload project’. И просто нажимаем F5. Выглядеть все должно после этого следующим образом:
Ура! Visual Studio для компиляции сама обратилась к make и gcc из Linux, и мы получили в окне IDE вывод от gcc и запустили нашу программу test, с которой так же можно работать из Windows.
Теперь кратко разберем основной файл make_vs.props (начнем с конца..). Файл разбит на группы настроек, для того чтобы избежать лишнего копирования текста из одного проекта в другой (методика опробована на практике для Solution более чем из сотни проектов такого вида).
Первый(на самом деле последний) блок — это блок настроек, которые Visual Studio использует для осуществления сборки проекта, состоит ихдвух дублирующихся групп для конфигураций Debug и Release.
Как не трудно догадаться, значения тэгов следующие:
• NMakeBuildCommandLine – команда Build (make all).
• NMakeReBuildCommandLine – команда Rebuild (make rebuild).
• NMakeCleanCommandLine – команда Clean (make clean).
• IncludePath – список Include директорий. Без корректного списка VS не сможет нормально обработать и распарсить Ваш код.
• LocalDebuggerCommand – команда запуска программы после компиляции.
• LocalDebuggerCommandArguments – аргументы команды при запуске программы после компилляции.
На данном этапе все значения указаны ссылками для других настроек. Эту группу настроек удобно выделить в Common.props и включать всегда во все проекты такого вида.
Следующая группа настроек соответствует заданию команд, которые должны выполняться при сборке.
.
Значения тэгов следующие:
• RbToolArgs – стандартные аргументы утилиты plink которые будут использоваться всегда.
• RbToolExe – общее значение начала всех команд, которые будут использоваться далее.
• RbBuildCmd – простая команда Build.
• RbRebuildAllCmd – простая команда Rebuild.
• RbCleanCmd – простая команда Clean.
• RbExecuteCmd – для запуска программы test после сборки все делится на команду и аргументы – эта часть отвечает за аргументы.
• RbIncludePath – переобозначенный список Include директорий.
Описанную группу настроек удобно выделить в тот же Common.props.
Следующая группа настроек, общая для всех проектов, но некоторые параметры будут различаться в зависимости от настроек стенда.
Как можно видеть, указаны имя хоста, идентификатор пользователя и его пароль, а так же путь к каталогу с файлами проектов для Linux. Эти настройки удобно выделить в специальный user.props и включать его в Common.props при помощи тэга Import.
Последняя группа настроек касается только конкретного проекта.
Значения тэгов следующие:
• RblFolder – папка, где находятся файлы проекта (для Linux).
• RblIncludePath – список Include директорий (для Windows).
• RblExecute – команда для запуска.
Учтите, что при каждой команде Build происходит установка ssh соединения, что требует некоторого времени (например, у меня выходило порядка 2-5 секунд).
В итоге у нас получилось заставить Visual Studio оcуществлять сборку проекта при помощи makefile и gcc из Linux.
Я создаю очень большой проект (несколько тысяч строк) и так что бы не использовать Notepad++. IDE сделает это намного проще. У меня есть опыт работы с Microsoft Visual Studio и мне это нравится. Есть ли простой способ использовать GCC Cygwin из Microsoft Visual Studio?
альтернативно, есть ли другие хорошие идентификаторы Windows для GCC, кроме NetBeans и Eclipse? (Я страстно ненавижу их обоих.)
Вариант 1: Создайте пользовательский инструмент сборки
насколько я знаю, никто еще не сделал этого для GCC. И, делая это самостоятельно, требуется написать COM-код, который, вероятно, слишком глубок для погружения в бассейн только для одного проекта. У тебя должна быть веская причина, чтобы взяться за этот проект.
затем вам нужно вручную настроить каждый проект, чтобы он использовал пользовательский инструмент сборки вместо стандартного, так как вы используете расширение имени файла ( .cpp , вероятно), о котором Visual C++ уже знает. Вы столкнетесь с проблемами, если попытаетесь смешать компиляторы VC++ и g++ для одного исполняемого файла, построенного из нескольких модулей.
С другой стороны, если вы хотите начать проект с открытым исходным кодом, это звучит как хорошая для меня. Я ожидаю, что вы быстро соберете большую базу пользователей.
Вариант 2: Проект Makefile
запустите Visual Studio и скажите Файл > Новый проект.
в разделе Visual C++ выберите проект Makefile
не устанавливайте флажок, предлагающий проверить проект в систему управления версиями, если вы используете Visual Studio Express. Если вы не платите за Visual Studio, вы, вероятно, также решили не платить за дорогостоящие "решения" Microsoft, и VSE не поддерживает сторонние VCS плагины, такие как AnkhSVN на в Subversion.
заполните мастер проекта Makefile:
- построить командную строку: сделать
- чистый команды: чистые
- перестроить командную строку: сделать очистить все
оставить выход (для отладки) только поле, если вы не делаете что-то странное, например, не называя исполняемый файл после имени проекта или помещая имя исполняемого файла где-то, кроме верхнего уровня проекта.
оставьте остальные поля в покое, если вы не знаете, что они такое и почему вы хотите их изменить. Так же, как пример, вы можете выбрать, чтобы передать -D флаг на определения препроцессора line для получения отдельных отладочных и выпускных выходов. Если вы знаете, что хотите этого, вы знаете, как это устроить, поэтому я не собираюсь делать этот длинный ответ еще дольше, чтобы объяснить его. (И если вы не знаете, как, но хотите, это, вероятно, хорошая тема для нового вопроса SO!)
вам будет задан тот же набор вопросов для сборки выпуска. Если вы хотите возиться с отдельными сборками отладки и выпуска, вы должны внести любые изменения здесь.
сделав все это, вы все равно должны создать Makefile и добавить make.exe на PATH . Как и в случае с отладки и вопрос освобождения, идя в том, что уровень детализации будет толкать этот ответ не по теме.
как бы уродливо это ни выглядело, это все равно проще, чем создавать пользовательские инструменты сборки. Кроме того, вы говорите, что вам нужно портировать в Unix в конце концов, поэтому вам понадобится это Makefile в любом случае.
Вариант 3: Кросс-Платформенная Разработка
вы скажем, вы хотите перенести эту программу в Unix в какой-то момент, но это не означает, что вы должны использовать GCC в Windows сейчас. Вполне возможно написать вашу программу так, чтобы она строилась под Visual C++ на Windows и gcc/Makefiles на системах *ix.
есть даже несколько инструментов, которые делают это проще, создавая файлы VS project и Makefile S из одного общего источника. Я использую Bakefile, а CMake становится все более популярным в последние годы. проектов SCons также выполняет эту работу и, вероятно, также более популярен, чем Bakefile; он, безусловно, обновляется чаще.
Я продолжаю (тыкать) цепочку инструментов C / C++, используя Визуальный Код на Win / Lin / Mac и MinGW, установленных из Choclatey. (Это было сделано для моего здравомыслия - установите GDB и GCC, как вы хотите)
Я запустил его с GCC и GDB с IntelliSense, используя собственные странные JSON-файлы MS. Когда-нибудь, кто-нибудь (вы?) напишет скрипт Gradle или Python для их генерации; пока примеры в интернете в документах кажется работать.
Проекты Linux поддерживаются в Visual Studio версии 2017 и выше. Чтобы увидеть документацию для этих версий, установите в данной статье селектор Версия Visual Studio в Visual Studio 2017 или Visual Studio 2019. Он находится в верхней части оглавления на этой странице.
Вы можете использовать интегрированную среду разработки Visual Studio в Windows для создания, редактирования и отладки проектов C++, которые выполняются в удаленной системе Linux, на виртуальной машине или в подсистеме Windows для Linux.
Вы можете работать с имеющейся базой кода, где CMake не требуется преобразовывать в проект Visual Studio. Если база кода является кроссплатформенной, в Visual Studio можно создавать решения как для Windows, так и для Linux. Например, с помощью Visual Studio можно редактировать, выполнять сборку и отлаживать свой код в Windows. Затем можно быстро перенацелить проект для Linux на сборку и отладку в среде Linux. Файлы заголовков Linux автоматически копируются на ваш локальный компьютер. Visual Studio использует их для обеспечения полной поддержки технологии IntelliSense (завершение операторов, переход к определению и т. д.).
Чтобы использовать любой из этих сценариев, требуется рабочая нагрузка Разработка для Linux на C++ .
Установка Visual Studio
В поле поиска Windows введите "Visual Studio Installer":
Найдите установщик в разделе Приложения и дважды щелкните его. Когда откроется установщик, щелкните Изменить и перейдите на вкладку Рабочие нагрузки. Прокрутите вниз до раздела Другие наборы инструментов и выберите рабочую нагрузку Разработка для Linux на C++ .
Если вы используете внедренную платформу или платформу Интернета вещей, перейдите в панель Сведения об установке, которая находится справа. В разделе Разработка для Linux на C ++ разверните узел Необязательные компоненты и выберите нужные компоненты. Поддержка CMake для Linux включена по умолчанию.
Для продолжения установки нажмите кнопку Изменить.
Варианты создания среды Linux
Если у вас нет компьютера Linux, можно создать виртуальную машину Linux в Azure. Дополнительные сведения см. в разделе Краткое руководство. Создание виртуальной машины Linux на портале Azure.
В Windows 10 и более поздних версий можно установить и настроить использование определенного дистрибутива Linux в подсистеме Windows для Linux (WSL). См. подробнее руководство по установке подсистемы Windows для Linux в Windows 10. Если не удается получить доступ к Microsoft Store, можете вручную скачать пакеты дистрибутивов WSL. WSL — это удобная консольная среда, но ее не рекомендуется использовать для графических приложений.
Для проектов Linux в Visual Studio необходимо установить следующие зависимости в удаленной системе Linux или WSL:
- Компилятор — Visual Studio 2019 и более поздних версий полностью поддерживает GCC и Clang.
- gdb — Visual Studio автоматически запускает gdb в системе Linux и использует интерфейс отладчика Visual Studio для обеспечения всех возможностей отладки в Linux.
- rsync и zip — благодаря включению rsync и zip Visual Studio может извлекать файлы заголовков из системы Linux в файловую систему Windows для использования технологией IntelliSense.
- make
- openssh-server (только удаленные системы Linux) — Visual Studio подключается к удаленным системам Linux через безопасное SSH-соединение.
- CMake (только для проектов CMake) — вы можете установить статически связанные двоичные файлы CMake для Linux.
- ninja-build (только для проектов CMake) — Ninja является генератором по умолчанию для конфигураций Linux и WSL в Visual Studio 2019 версии 16.6 или более поздней версии.
В следующих командах предполагается, что вы используете g++ вместо clang.
Для проектов Linux в Visual Studio необходимо установить следующие зависимости в удаленной системе Linux или WSL:
- gcc — Visual Studio 2017 полностью поддерживает GCC.
- gdb — Visual Studio автоматически запускает gdb в системе Linux и использует интерфейс отладчика Visual Studio для обеспечения всех возможностей отладки в Linux.
- rsync и zip — благодаря включению rsync и zip Visual Studio может извлекать файлы заголовков из системы Linux в файловую систему Windows для использования технологией IntelliSense.
- make
- openssh-server — Visual Studio подключается к удаленным системам Linux через защищенное SSH-соединение.
- CMake (только для проектов CMake) — вы можете установить статически связанные двоичные файлы CMake для Linux.
Установка Linux: Использование Ubuntu в WSL
Если вы используете WSL, для сборки и отладки не требуется добавлять удаленное подключение или настраивать SSH. Использование zip и rsync является обязательным для автоматической синхронизации заголовков Linux в Visual Studio и включения поддержки Intellisense. ninja-build требуется только для проектов CMake. Если необходимые приложения отсутствуют, их можно установить с помощью следующей команды:
Использование Ubuntu в удаленных системах Linux
В целевой системе Linux должны быть установлены openssh-server, g++ , gdb и make. ninja-build требуется только для проектов CMake. Должна быть запущена управляющая программа ssh. Использование zip и rsync необходимо для автоматической синхронизации удаленных заголовков на локальном компьютере, чтобы обеспечить поддержку Intellisense. Если этих приложений еще нет, их можно установить следующим образом.
В командной строке оболочки на компьютере Linux выполните следующую команду:
Для выполнения команды sudo вам может быть предложено ввести пароль учетной записи root. Введите его и продолжите. После завершения будут установлены требуемые службы и средства.
Запустите службу ssh на компьютере Linux, выполнив следующую команду:
Эта команда запускает службу в фоновом режиме и в состоянии готовности к принятию подключений.
Использование Fedora в WSL
В Fedora используются установщик пакетов dnf. Чтобы скачать g++ , gdb, make, rsync, ninja-build и zip, выполните следующую команду:
Использование zip и rsync является обязательным для автоматической синхронизации заголовков Linux в Visual Studio и включения поддержки Intellisense. ninja-build требуется только для проектов CMake.
Использование Fedora в удаленных системах Linux
На целевой машине под управлением Fedora используются установщик пакетов dnf. Чтобы скачать openssh-server, g++ , gdb, make, ninja-build, rsync и zip, а затем перезапустить управляющую программу ssh, сделайте следующее: ninja-build требуется только для проектов CMake.
В командной строке оболочки на компьютере Linux выполните следующую команду:
Для выполнения команды sudo вам может быть предложено ввести пароль учетной записи root. Введите его и продолжите. После завершения будут установлены требуемые службы и средства.
Запустите службу ssh на компьютере Linux, выполнив следующую команду:
Эта команда запускает службу в фоновом режиме и в состоянии готовности к принятию подключений.
Следующие шаги
Теперь вы можете создать или открыть проект Linux, а также настроить его для выполнения в целевой системе. Дополнительные сведения можно найти в разделе
Читайте также: