Using C++ on Linux in VS Code
In this tutorial, you will configure Visual Studio Code to use the GCC C++ compiler (g++) and GDB debugger on Linux. GCC stands for GNU Compiler Collection; GDB is the GNU debugger.
After configuring VS Code, you will compile and debug a simple C++ program in VS Code. This tutorial does not teach you GCC, GDB, Ubuntu or the C++ language. For those subjects, there are many good resources available on the Web.
If you have trouble, feel free to file an issue for this tutorial in the VS Code documentation repository.
Prerequisites
To successfully complete this tutorial, you must do the following:
- Install Visual Studio Code.
- Install the C++ extension for VS Code. You can install the C/C++ extension by searching for ‘c++’ in the Extensions view ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ).
Ensure GCC is installed
Although you’ll use VS Code to edit your source code, you’ll compile the source code on Linux using the g++ compiler. You’ll also use GDB to debug. These tools are not installed by default on Ubuntu, so you have to install them. Fortunately, that’s easy.
First, check to see whether GCC is already installed. To verify whether it is, open a Terminal window and enter the following command:
gcc -v
If GCC isn’t installed, run the following command from the terminal window to update the Ubuntu package lists. An out-of-date Linux distribution can sometimes interfere with attempts to install new packages.
sudo apt-get update
Next install the GNU compiler tools and the GDB debugger with this command:
sudo apt-get install build-essential gdb
Create Hello World
From the terminal window, create an empty folder called projects to store your VS Code projects. Then create a subfolder called helloworld , navigate into it, and open VS Code in that folder by entering the following commands:
mkdir projects cd projects mkdir helloworld cd helloworld code .
The code . command opens VS Code in the current working folder, which becomes your «workspace». As you go through the tutorial, you will create three files in a .vscode folder in the workspace:
- tasks.json (compiler build settings)
- launch.json (debugger settings)
- c_cpp_properties.json (compiler path and IntelliSense settings)
Add hello world source code file
In the File Explorer title bar, select New File and name the file helloworld.cpp .

Paste in the following source code:
#include #include #include using namespace std; int main() vector msg "Hello", "C++", "World", "from", "VS Code", "and the C++ extension!">; for (const string& word : msg) cout << word < " "; > cout >
Now press ⌘S (Windows, Linux Ctrl+S ) to save the file. Notice that your files are listed in the File Explorer view ( ⇧⌘E (Windows, Linux Ctrl+Shift+E ) ) in the side bar of VS Code:

You can also enable Auto Save to automatically save your file changes, by checking Auto Save in the main File menu.
The Activity Bar on the edge of Visual Studio Code lets you open different views such as Search, Source Control, and Run. You’ll look at the Run view later in this tutorial. You can find out more about the other views in the VS Code User Interface documentation.
Note: When you save or open a C++ file, you may see a notification from the C/C++ extension about the availability of an Insiders version, which lets you test new features and fixes. You can ignore this notification by selecting the X (Clear Notification).
Explore IntelliSense
In the helloworld.cpp file, hover over vector or string to see type information. After the declaration of the msg variable, start typing msg. as you would when calling a member function. You should immediately see a completion list that shows all the member functions, and a window that shows the type information for the msg object:

You can press the Tab key to insert the selected member. Then, when you add the opening parenthesis, you’ll see information about arguments that the function requires.
Run helloworld.cpp
Remember, the C++ extension uses the C++ compiler you have installed on your machine to build your program. Make sure you have a C++ compiler installed before attempting to run and debug helloworld.cpp in VS Code.
- Open helloworld.cpp so that it is the active file.
- Press the play button in the top right corner of the editor.

- Choose g++ build and debug active file from the list of detected compilers on your system.

You’ll only be asked to choose a compiler the first time you run helloworld.cpp . This compiler will be set as the «default» compiler in tasks.json file.

- After the build succeeds, your program’s output will appear in the integrated Terminal.
The first time you run your program, the C++ extension creates tasks.json , which you’ll find in your project’s .vscode folder. tasks.json stores build configurations.
Your new tasks.json file should look similar to the JSON below:
"version": "2.0.0", "tasks": [ "type": "shell", "label": "C/C++: g++ build active file", "command": "/usr/bin/g++", "args": ["-g", "$", "-o", "$/$"], "options": "cwd": "/usr/bin" >, "problemMatcher": ["$gcc"], "group": "kind": "build", "isDefault": true >, "detail": "Task generated by Debugger." > ] >
Note: You can learn more about tasks.json variables in the variables reference.
The command setting specifies the program to run; in this case that is g++. The args array specifies the command-line arguments that will be passed to g++. These arguments must be specified in the order expected by the compiler.
This task tells g++ to take the active file ( $ ), compile it, and create an executable file in the current directory ( $ ) with the same name as the active file but without an extension ( $ ), resulting in helloworld for our example.
The label value is what you will see in the tasks list; you can name this whatever you like.
The detail value is what you will as the description of the task in the tasks list. It’s highly recommended to rename this value to differentiate it from similar tasks.
From now on, the play button will read from tasks.json to figure out how to build and run your program. You can define multiple build tasks in tasks.json , and whichever task is marked as the default will be used by the play button. In case you need to change the default compiler, you can run Tasks: Configure default build task. Alternatively you can modify the tasks.json file and remove the default by replacing this segment:
"group": "kind": "build", "isDefault": true >,
"group": "build",
Modifying tasks.json
You can modify your tasks.json to build multiple C++ files by using an argument like «$/*.cpp» instead of $ .This will build all .cpp files in your current folder. You can also modify the output filename by replacing «$/$» with a hard-coded filename (for example ‘helloworld.out’).
Debug helloworld.cpp
To debug your code,
- Go back to helloworld.cpp so that it is the active file.
- Set a breakpoint by clicking on the editor margin or using F9 on the current line.

- From the drop-down next to the play button, select Debug C/C++ File.

- Choose C/C++: g++ build and debug active file from the list of detected compilers on your system (you’ll only be asked to choose a compiler the first time you run or debug helloworld.cpp ).

The play button has two modes: Run C/C++ File and Debug C/C++ File. It will default to the last-used mode. If you see the debug icon in the play button, you can just select the play button to debug, instead of selecting the drop-down menu item.
Explore the debugger
Before you start stepping through the code, let’s take a moment to notice several changes in the user interface:
- The Integrated Terminal appears at the bottom of the source code editor. In the Debug Output tab, you see output that indicates the debugger is up and running.
- The editor highlights line 12, which is a breakpoint that you set before starting the debugger:

- The Run and Debug view on the left shows debugging information. You’ll see an example later in the tutorial.
- At the top of the code editor, a debugging control panel appears. You can move this around the screen by grabbing the dots on the left side.

If you already have a launch.json file in your workspace, the play button will read from it when figuring out how run and debug your C++ file. If you don’t have launch.json, the play button will create a temporary “quick debug” configuration on the fly, eliminating the need for launch.json altogether!
Step through the code
Now you’re ready to start stepping through the code.
- Click or press the Step over icon in the debugging control panel.
This will advance program execution to the first line of the for loop, and skip over all the internal function calls within the vector and string classes that are invoked when the msg variable is created and initialized. Notice the change in the Variables window on the side. 
- Press Step over again to advance to the next statement in this program (skipping over all the internal code that is executed to initialize the loop). Now, the Variables window shows information about the loop variables.
- Press Step over again to execute the cout statement. (Note that as of the March 2019 release, the C++ extension does not print any output to the Debug Console until the last cout executes.)
- If you like, you can keep pressing Step over until all the words in the vector have been printed to the console. But if you are curious, try pressing the Step Into button to step through source code in the C++ standard library!
To return to your own code, one way is to keep pressing Step over. Another way is to set a breakpoint in your code by switching to the helloworld.cpp tab in the code editor, putting the insertion point somewhere on the cout statement inside the loop, and pressing F9 . A red dot appears in the gutter on the left to indicate that a breakpoint has been set on this line.
Then press F5 to start execution from the current line in the standard library header. Execution will break on cout . If you like, you can press F9 again to toggle off the breakpoint. When the loop has completed, you can see the output in the Debug Console tab of the integrated terminal, along with some other diagnostic information that is output by GDB. 
Set a watch
To keep track of the value of a variable as your program executes, set a watch on the variable.
- Place the insertion point inside the loop. In the Watch window, click the plus sign and in the text box, type word , which is the name of the loop variable. Now view the Watch window as you step through the loop.

- To quickly view the value of any variable while execution is paused on a breakpoint, you can hover over it with the mouse pointer.

Next, you’ll create a tasks.json file to tell VS Code how to build (compile) the program. This task will invoke the g++ compiler to create an executable file from the source code.
It’s important to have helloworld.cpp open in the editor because the next step uses the active file in the editor for context to create the build task in the next step.
Customize debugging with launch.json
When you debug with the play button or F5 , the C++ extension creates a dynamic debug configuration on the fly.
There are cases where you’d want to customize your debug configuration, such as specifying arguments to pass to the program at runtime. You can define custom debug configurations in a launch.json file.
To create launch.json , choose Add Debug Configuration from the play button drop-down menu.

You’ll then see a dropdown for various predefined debugging configurations. Choose g++ build and debug active file.

VS Code creates a launch.json file, which looks something like this:
"version": "0.2.0", "configurations": [ "name": "C/C++: g++ build and debug active file", "type": "cppdbg", "request": "launch", "program": "$/$", "args": [], "stopAtEntry": false, "cwd": "$", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "setupCommands": [ "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true > ], "preLaunchTask": "C/C++: g++ build active file" > ] >
In the JSON above, program specifies the program you want to debug. Here it is set to the active file folder $ and active filename without an extension $ , which if helloworld.cpp is the active file will be helloworld . The args property is an array of arguments to pass to the program at runtime.
By default, the C++ extension won’t add any breakpoints to your source code and the stopAtEntry value is set to false .
Change the stopAtEntry value to true to cause the debugger to stop on the main method when you start debugging.
From now on, the play button and F5 will read from your launch.json file when launching your program for debugging.
C/C++ configurations
If you want more control over the C/C++ extension, you can create a c_cpp_properties.json file, which will allow you to change settings such as the path to the compiler, include paths, C++ standard (default is C++17), and more.
You can view the C/C++ configuration UI by running the command C/C++: Edit Configurations (UI) from the Command Palette ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ).

This opens the C/C++ Configurations page. When you make changes here, VS Code writes them to a file called c_cpp_properties.json in the .vscode folder.

You only need to modify the Include path setting if your program includes header files that are not in your workspace or in the standard library path.
Visual Studio Code places these settings in .vscode/c_cpp_properties.json . If you open that file directly, it should look something like this:
"configurations": [ "name": "Linux", "includePath": ["$/**"], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" > ], "version": 4 >
Reusing your C++ configuration
VS Code is now configured to use gcc on Linux. The configuration applies to the current workspace. To reuse the configuration, just copy the JSON files to a .vscode folder in a new project folder (workspace) and change the names of the source file(s) and executable as needed.
Troubleshooting
Compiler and linking errors
The most common cause of errors (such as undefined _main , or attempting to link with file built for unknown-unsupported file format , and so on) occurs when helloworld.cpp is not the active file when you start a build or start debugging. This is because the compiler is trying to compile something that isn’t source code, like your launch.json , tasks.json , or c_cpp_properties.json file.
Next steps
- Explore the VS Code User Guide.
- Review the Overview of the C++ extension.
- Create a new workspace, copy your .json files to it, adjust the necessary settings for the new workspace path, program name, and so on, and start coding!
Урок №5. Компиляция вашей первой программы
Перед написанием нашей первой программы мы еще должны кое-что узнать.
Оглавление:
- Теория
- Пользователям Visual Studio
- Пользователям Code::Blocks
- Пользователям командной строки
- Пользователям веб-компиляторов
- Пользователям других IDE
- Если компиляция прошла неудачно
- Заключение
Теория
Во-первых, несмотря на то, что код ваших программ находится в файлах .cpp, эти файлы добавляются в проект. Проект содержит все необходимые файлы вашей программы, а также сохраняет указанные вами настройки вашей IDE. Каждый раз, при открытии проекта, он запускается с того момента, на котором вы остановились в прошлый раз. При компиляции программы, проект говорит компилятору и линкеру, какие файлы нужно скомпилировать, а какие связать. Стоит отметить, что файлы проекта одной IDE не будут работать в другой IDE. Вам придется создать новый проект (в другой IDE).
Во-вторых, есть разные типы проектов. При создании нового проекта, вам нужно будет выбрать его тип. Все проекты, которые мы будем создавать на данных уроках, будут консольного типа. Это означает, что они запускаются в консоли (аналог командной строки). По умолчанию, консольные приложения не имеют графического интерфейса пользователя — GUI (сокр. от «Graphical User Interface») и компилируются в автономные исполняемые файлы. Это идеальный вариант для изучения языка C++, так как он сводит всю сложность к минимуму.
В-третьих, при создании нового проекта большинство IDE автоматически добавят ваш проект в рабочее пространство. Рабочее пространство — это своеобразный контейнер, который может содержать один или несколько связанных проектов. Несмотря на то, что вы можете добавить несколько проектов в одно рабочее пространство, все же рекомендуется создавать отдельное рабочее пространство для каждой программы. Это намного упрощает работу для новичков.
Традиционно, первой программой на новом языке программирования является всеми известная программа «Hello, world!». Мы не будем нарушать традиции
Пользователям Visual Studio
Для создания нового проекта в Visual Studio 2019, вам нужно сначала запустить эту IDE, затем выбрать «Файл» > «Создать» > «Проект» :

Дальше появится диалоговое окно, где вам нужно будет выбрать «Консольное приложение Windows» из вкладки «Visual C++» и нажать «ОК» :

Также вы можете указать имя проекта (любое) и его расположение (рекомендую ничего не менять) в соответствующих полях.
В текстовом редакторе вы увидите, что уже есть некоторый текст и код — удалите его, а затем напечатайте или скопируйте следующий код:
DevDotNet.ORG
Embedded Systems, IoT, .NET, Docker, Hosting, Linux
Создание первого приложения на .NET 5.0 в Visual Studio Code для ARM
Создано автором Anton 22.02.2021 в .NET

В этой публикации вы узнаете, как создать первое консольное приложение на .NET 5.0 в Visual Studio Code, затем его скомпилировать для различных платформ(ARM32, ARM64), с дальнейшем запуском на платах Banana Pi BPI-M64 и Cubietruck.
Visual Studio Code
Visual Studio Code — редактор исходного кода, разработанный Microsoft для Windows, Linux и macOS. Позиционируется как «лёгкий» редактор кода для кроссплатформенной разработки веб- и облачных приложений. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации. Распространяется бесплатно, разрабатывается как программное обеспечение с открытым исходным кодом, но готовые сборки распространяются под проприетарной лицензией. Многие возможности Visual Studio Code недоступны через графический интерфейс, зачастую они используются с помощью различных команд или JSON-файлы (например, пользовательские настройки).
Существуют сборки для ОС:
- Windows(64-bit,32-bit,ARM)
- Debian(64-bit,32-bit,ARM)
- Ubuntu(64-bit,32-bit,ARM)
- macOS10.10+
Загрузка Visual Studio Code доступна по ссылке.
Установка SDK .NET, Visual Studio Code и расширения поддержки C#
SDK .NET 5.0
Первым делом необходимо установить SDK .NET 5.0. Перейдем на страницу Download .NET 5.0, выберем SDK 5.0.103 => Installers => x64 (для Windows x64). Загрузим пакет и установим.
После установки откроем командную строку, кнопка «Пуск», пункт меню «Выполнить» команда CMD , укажем команду: dotnet —info
Windows x64: dotnet —info
D:\>dotnet --info Пакет SDK для .NET (отражающий любой global.json): Version: 5.0.103 Commit: 72dec52dbd Среда выполнения: OS Name: Windows OS Version: 6.1.7601 OS Platform: Windows RID: win7-x64 Base Path: C:\Program Files\dotnet\sdk\5.0.103\ Host (useful for support): Version: 5.0.3 Commit: c636bbdc8a .NET SDKs installed: 5.0.103 [C:\Program Files\dotnet\sdk] .NET runtimes installed: Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspN etCore.All] . Microsoft.WindowsDesktop.App 5.0.0-rc.2.20475.6 [C:\Program Files\dotnet\share d\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 5.0.0 [C:\Program Files\dotnet\shared\Microsoft.W indowsDesktop.App] Microsoft.WindowsDesktop.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.W indowsDesktop.App] To install additional .NET runtimes or SDKs: https://aka.ms/dotnet-download
Visual Studio Code
Для загрузки Visual Studio Code перейдем на страницу загрузки и выберем нужный вариант пакета. Очень удобно использовать программы в виде .zip (VSCode-win32-x64-1.53.2.zip) архива, распаковал и запустил. После загрузки и распаковки архива в папку, запустим среду: Code.exe .

Visual Studio Code
Расширение поддержки C#
Установим расширение C# for Visual Studio Code (powered by OmniSharp). Для этого нажмем на закладке: 1. Extensions, затем 2. в поле ввода напишем название расширения C# for Visual Studio Code, выберем пункт 3. C# for Visual Studio Code (powered by OmniSharp). 4. Перейдем на страницу описание расширения и нажмем на кнопку Install.

C# for Visual Studio Code (powered by OmniSharp)
После установки можно выполнить настройку расширения:

После установки расширения закроем Visual Studio Code, необходима перезагрузка.
Создание консольного приложения
Перейдем в папку с проектам \Projects\ и запустим командную строку. В командной стоке выполним команду: dotnet new console -o СonsoleApp50 , где СonsoleApp50 — название нового проекта.

После выполнения команды будет создана папка \Projects\СonsoleApp50\, в этой папке будет расположен наш проект: папка — obj, файл программы — Program.cs и файл проекта — СonsoleApp50.csproj.
Добавление логики в консольное приложение
Просто запустить «Hello World!» на платформе ARM не интересно, поэтому добавим дополнительную логику в новое приложение. Приложение будет выводить информацию о системе в которой оно работает. Запустим Visual Studio Code и откроем папку с проектом \Projects\СonsoleApp50\.

Открытие проекта в Visual Studio Code
Далее, откроем меню Terminal => New Terminal:

Укажем команду сборки проекта: dotnet build

Затем команду для запуска приложения: dotnet run .

В функцию Main() поместим следующий код с вызовом исключения для проверки режима отладки (проект СonsoleApp50 на GitHub):
static void Main(string[] args) < Console.WriteLine("Test .NET console application!"); var str_Framework=RuntimeInformation.FrameworkDescription; var str_OSArch=RuntimeInformation.OSArchitecture.ToString(); var str_OSDesc= RuntimeInformation.OSDescription; var str_OSIdent=RuntimeInformation.RuntimeIdentifier; //output Console.WriteLine($"Версия .NET: "); Console.WriteLine($"Архитектура ОС: "); Console.WriteLine($"Версия ОС: "); Console.WriteLine($"Идентификатор ОС: "); //error Console.WriteLine("Генерировать исключение [yes/No]? "); var input_key=Console.ReadKey().Key; Console.Write("\n"); if (input_key==ConsoleKey.Y) < Console.Write("Генерация исключения"); throw new Exception("А вот и ошибочка!"); >Console.WriteLine("Завершение работы программы"); >Запустим проект, меню Run => Start Debugging.
Исключение: ошибка доступа к консоли
Приложение выдало исключение, но не то, которое было запланированно. Ошибка заключается в невозможности чтения данных с консоли. Для решение проблемы необходимо изменить в файле \Projects\СonsoleApp50\.vscode\launch.json, конфигурации запуска проекта с «console»: «internalConsole» на «console»: «integratedTerminal».
Снова запускаем проект, и переходим на закладку TERMINAL. Нажимаем «Y» и вызываем исключение.
В разделе Run => VARIABLES => Locals можно посмотреть текущее состояние переменных, так же при наведение указателя на переменную в коде, всплывает подсказка с содержанием переменной:
Отлично, отладка работает!
Компиляция приложения под разные архитектуры
Компилирование выполняется из командной строки, командой dotnet build , необходимые архитектуры задаются ключами. В .NET существуют константы для обозначения архитектуры исполнения Runtime Identifiers (RIDs). Из каталога нам потребуются идентификаторы:
- linux-arm — архитектура ARM32, для запуска приложения на Cubietruck.
- linux-arm64 — архитектура ARM64, для запуска приложения на Banana Pi BPI-M64.
Итоговый вариант команды будет выглядеть так: dotnet build -r linux-arm и dotnet build -r linux-arm64 .
Выполним компиляцию под обе платформы:

По пути \Projects\СonsoleApp50\bin\Debug\net5.0\ будут созданы две папки linux-arm и linux-arm64 для целевых платформ.
Воспользуемся бесплатным терминалом MobaXterm для копирования приложения на платы. Терминал MobaXterm — позволяет переносить целиком папку и выборочно файлы, существенно удобнее в работе по сравнению с PuTTY терминалом.
Скопируем папку linux-arm на плату Cubietruck, папку linux-arm64 на плату Banana Pi BPI-M64.
Запуск консольного приложения на Cubietruck
Для запуска .NET приложений на Cubietruck необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm на Cubietruck по пути /root/linux-arm, зайдем в папку linux-arm и выполним команду: dotnet СonsoleApp50.dll .
Результат работы консольного приложения:
root@cubietruck:~/linux-arm# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm Версия ОС: Linux 5.10.12-sunxi #21.02.1 SMP Wed Feb 3 20:39:30 CET 2021 Идентификатор ОС: ubuntu.20.04-arm Генерировать исключение [yes/No]? n Завершение работы программыЗапуск консольного приложения на Banana Pi BPI-M64
Для запуска .NET приложений на Banana Pi BPI-M64 необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm64 на Banana Pi BPI-M64 по пути /root/linux-arm64, зайдем в папку linux-arm64 и выполним команду: dotnet СonsoleApp50.dll
Результат работы консольного приложения:
root@bananapim64:~/linux-arm64# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm64 Версия ОС: Linux 5.8.6-sunxi64 #20.08.2 SMP Fri Sep 4 08:52:31 CEST 2020 Идентификатор ОС: ubuntu.18.04-arm64 Генерировать исключение [yes/No]? Завершение работы программыПриложения разработанные на .NET 5.0 успешно работают на архитектуре ARM32 и ARM64!
Литература
- .NET RID Catalog — .NET fundamentals
- Tutorial: Create a .NET console application using Visual Studio Code — .NET fundamentals
- .NET 5 – How to start — Michal Bialecki Blog
- Download Visual Studio Code
- dotnet build — Builds a project and all of its dependencies. — .NET fundamentals
- dotnet run — Runs source code without any explicit compile or launch commands.. — .NET fundamentals
- Visual Studio Code — Wikipedia
- C# for Visual Studio Code (powered by OmniSharp) — Visual Studio Code
- ReadKey not working in .net core — Stack Overflow
- Console (terminal) window — github.com/OmniSharp
- Проект СonsoleApp50 на GitHub
- Терминал Mobatek MobaXterm Home Edition (Free) — Download Page
Скомпилировать проект Visual C++ для Linux.
У меня есть сервер, разработанный в Visual C++. Работать в Visual C++ мне удобно, но серверное приложение будет работать в Debian.
Идеальна была бы возможность компилировать этот VC++ проект для Debian, не меняя формат проекта. Есть ещё клиент на Qt, который тоже хотелось бы собирать для линуксов и мака. Но работать мне удобно в VC++. Возможно ли скомпилировать под линукс vcproj? Может есть возможность конвертировать проект в QtCreator-проект или что-то ещё и обратно? Какие возможны решения для моей проблемы?
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-develop. Вот это мне показалось то, что мне нужно, почитал, пытался воспроизвести, но тут похоже что-то с проводами связано? Наверное мне не подходит?

user08 ★
31.03.16 20:35:28 MSK
← 1 2 →
Конечно Visual C++ — ещё та кака, но, говоря более объективно, тебе надо написать Makefile со списком всех cpp/c файлов и опциями к GCC. Сам в гугле найдёшь как. Потом вызывай make и оно само соберёт тебе бинарник с сервером.
В зависимости от того, какие быдлокодеры у вас в проекте, возможно придётся поправить несколько ошибок и только потом собирать для Linux.
Для Qt рекомендую вообще использовать ихний QMake как систему сборки. Ибо меньше усилий.
a1batross ★★★★★
( 31.03.16 20:40:08 MSK )
Последнее исправление: a1batross 31.03.16 20:40:23 MSK (всего исправлений: 1)

Xenon ★★★
( 31.03.16 20:40:13 MSK )

robot12 ★★★★★
( 31.03.16 20:41:28 MSK )

CMake поддерживает Qt и умеет генерацию проектов под MSVC, Qt Creator.
Norgat ★★★★★
( 31.03.16 20:42:58 MSK )
Ответ на: комментарий от a1batross 31.03.16 20:40:08 MSK

надо написать Makefile со списком всех cpp/c файлов и опциями к GCC
Makefile - понятно. Но мне удобно отлаживаться в Visual C++. Я так понимаю, что в этом случае мне надо будет одновременно работать с vcproj и Makefile?
user08 ★
( 31.03.16 20:43:29 MSK ) автор топика
Возможно тебе поможет что-то вроде этого, но рекомендую все же ознакомится с Makefile'ами и научиться создавать и собирать проект без применения GUI.
m0rph ★★★★★
( 31.03.16 20:45:22 MSK )
Ответ на: комментарий от user08 31.03.16 20:43:29 MSK
vcproj под Linux только вроде какое-то недоIDE понимало.
Отлаживать в VC++ тебе не выйдет. Берёшь GDB, консольку и там всё делаешь. Вполне удобно после нескольких часов труда и более функционально, чем огрызок в VC++.
Одновременно. ну по сути, да. В одном случае для сборки с Windows, во втором для Linux.
a1batross ★★★★★
( 31.03.16 20:46:01 MSK )
Ответ на: комментарий от a1batross 31.03.16 20:46:01 MSK

Почему не выйдет? Я хочу заниматься разработкой в Visual C++, а релиз компилировать для Debian.
user08 ★
( 31.03.16 20:49:40 MSK ) автор топика
Ответ на: комментарий от user08 31.03.16 20:49:40 MSK
Ну так занимайся. Кто тебе мешает? Только линуксовые бинари отлаживать в кривоподелке мелкософта у тебя не выйдет. Что придётся делать для отлаживания Linux-версии я тебе уже сказал. А я не думаю, что у вас там такой код, который легко перенесётся на Linux и будет точно одинаково работать.
a1batross ★★★★★
( 31.03.16 20:51:20 MSK )
Последнее исправление: a1batross 31.03.16 20:51:40 MSK (всего исправлений: 1)
Ответ на: комментарий от robot12 31.03.16 20:41:28 MSK

У меня установлен Wine. Я так понимаю вместе с ним должен быть Winemaker?
bash: winemaker: command not found
user08 ★
( 31.03.16 21:04:47 MSK ) автор топика
Ответ на: комментарий от user08 31.03.16 21:04:47 MSK

winemaker is part of the Wine distribution, which is available through WineHQ
robot12 ★★★★★
( 31.03.16 21:06:29 MSK )
Переходишь на cmake. Он тебе генерирует и vcproj с sln и что захочешь для нужной платформы.
invy ★★★★★
( 31.03.16 21:07:43 MSK )

Просто перейди на qmake - не забивай себе моск.
I-Love-Microsoft ★★★★★
( 31.03.16 21:12:21 MSK )
Ответ на: комментарий от a1batross 31.03.16 20:51:20 MSK

Ну так занимайся. Кто тебе мешает? Только линуксовые бинари отлаживать в кривоподелке мелкософта у тебя не выйдет.
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-develop. Мне кажется это именно то, что мне нужно. Но я не понимаю, что на хосте надо сделать, чтобы к нему подключиться.
user08 ★
( 31.03.16 21:12:37 MSK ) автор топика
Последнее исправление: user08 31.03.16 21:16:47 MSK (всего исправлений: 1)
по ссылке на скриншоте Remote GDB Debugger в студии, так что теоретически это именно решение для подобной разработки, но его вчера анонсировали - трудно что-то по нему сказать, кроме того что оно недоделано
зы если непонятно, там подразумевается линукс в ВМ, куда shell'ом шлются исходники, команды gdb и т.п.
anonymous
( 31.03.16 21:49:46 MSK )

Вот тут у меня разрыв шаблонов. Объясните пжлста как не c/c++ погроммисту в чем сложность смены visual c++ и linux окружения для разработчика? В c/c++ я не умею, но в python разницы нет, в чем сложность? можно в 2х словах?
ggrn ★★★★★
( 01.04.16 00:26:30 MSK )
Ответ на: комментарий от ggrn 01.04.16 00:26:30 MSK
смены visual c++ и linux окружения для разработчика?
В том, что под линуксом нет окружения для С++ разработчика. Есть motor, но это скорее С, все остальное - жалкая пародия на студию.
По теме - cmake уже посоветовали, бери, работает железно, ну или кросс-компилируй шлангом. Еще на rsdn.ru поищи - там товарищи делали аддон для ремоута к gdb, мб и отладку нормальную получишь, а не ахинею с bt/info locals и прочий бред из 70.
cnupm ★
( 01.04.16 02:27:25 MSK )
Ответ на: комментарий от ggrn 01.04.16 00:26:30 MSK

visual c++ окружение это, обычно, nmake + cl для сборки проекта, а проектные файлы это *.vcxproj + *.sln (там XML внутри). Можно использовать и Makefile для Visual Studio, но, скорее всего, там внутри будет cl компилятор.
В Linux у тебя make + gcc являются стандартом для сборки проекта.
Т.е. во-первых, разный формат проектных файлов. Во-вторых, разные компиляторы.
Из первого пункта вытекает, что необходимо готовить проектные файлы для кросс компиляции (писать Makefile под Linux или генерировать его автоматически, например с помощью CMake). Напоминаю, что в C/С++ не стандартизирована файловая структура проекта, поэтому каждый проект может иметь свою собственную. А чтобы компилятор понял где что лежит ему и нужны проектные файлы. Ну и в довесок сюда же линковка идёт.
Из второго пункта вытекает, что надо писать такой код, чтобы он компилировался и cl'ем, и gcc одинаково. В Visual C++ точно были нестандартные расширения и, в старых версиях, нестандартное поведение. В gcc тоже вроде есть нестандартные расширения компилятора. Не уверен на 100%, но вроде вот они: https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html
Так что кроме того, что код надо собрать, его ещё и написать надо так, чтобы он собрался под gcc. А это, к слову, ещё и отсутствие чисто виндовых либ, например Win32 API или написание двух вариантов кода: под Win32 и POSIX.
Norgat ★★★★★
( 01.04.16 09:21:51 MSK )
Ответ на: комментарий от cnupm 01.04.16 02:27:25 MSK

В том, что под линуксом нет окружения для С++ разработчика.
. Еще на rsdn.ru поищи - там товарищи делали аддон для ремоута к gdb, мб и отладку нормальную получишь, а не ахинею с bt/info locals и прочий бред из 70.
А можно скрин «нормальной отладки» увидеть? А пока что мне кажется, что ты зашёл не на тот сайт, но считаешь себя круче других.



