{"id":14225,"date":"2017-04-11T16:38:21","date_gmt":"2017-04-11T16:38:21","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/?p=14225"},"modified":"2022-08-23T18:48:59","modified_gmt":"2022-08-23T18:48:59","slug":"linux-development-with-c-in-visual-studio","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/linux-development-with-c-in-visual-studio\/","title":{"rendered":"Linux development with C++ in Visual Studio"},"content":{"rendered":"<p><div class=\"alert alert-info\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Content outdated<\/strong><\/p> For up-to-date documentation see <a class=\"Hyperlink SCXW99144421 BCX8\" href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/download-install-and-setup-the-linux-development-workload?view=msvc-170\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW99144421 BCX8\" lang=\"EN-GB\" xml:lang=\"EN-GB\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW99144421 BCX8\" data-ccp-charstyle=\"Hyperlink\">Linux development with C++<\/span><\/span><\/a>.<\/p>\n<p>For an overview of the Visual Studio capabilities described in this article, see <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/features\/cplusplus\/\">Develop C and C++ applications<\/a>.<\/div>This post was updated on December 11, 2020<\/p>\n<p>Visual Studio 2017 introduced the <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/download-install-and-setup-the-linux-development-workload?view=msvc-160\">Linux Development with C++ workload<\/a>. We generally recommend <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/cmake-projects-in-visual-studio?view=msvc-160&amp;viewFallbackFrom=vs-2019\">Visual Studio\u2019s native support for CMake<\/a> for all C++ Linux development. Visual Studio\u2019s CMake support allows you to target multiple platforms (Windows, a remote Linux system, the Windows Subsystem for Linux, embedded targets\u2026) with a single CMake project. You can learn more about CMake projects in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/cmake-projects-in-visual-studio?view=msvc-160&amp;viewFallbackFrom=vs-2019\">documentation<\/a> and on our <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/\">C++ Team Blog<\/a>.<\/p>\n<p>This post describes how to use Visual Studio\u2019s MSBuild-based support to build and debug on a remote Linux system with Visual Studio 2019. If you are looking to target both Windows and Linux with the same project, our recommendation is to use CMake.<\/p>\n<p>In this post, you will learn:<\/p>\n<ul>\n<li>How to acquire the <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/download-install-and-setup-the-linux-development-workload?view=msvc-160\">Linux Development with C++ workload<\/a>,<\/li>\n<li>How to create a <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/create-a-new-linux-project?view=msvc-160\">MSBuild-based<\/a> Linux C++ project,<\/li>\n<li>How to establish your first connection to a Linux machine from Visual Studio,<\/li>\n<li>How sources are managed between Visual Studio and Linux,<\/li>\n<li>What capabilities the Linux project system provides, and<\/li>\n<li>How to use Visual Studio diagnostic tools to find and resolve issues.<\/li>\n<\/ul>\n<p>If you are new to using Visual Studio for C++ development, a great starting point is our guide to <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/get-started\/tutorial-console-cpp?view=msvc-160\">Getting Started with Visual Studio<\/a>.<\/p>\n<h2>Install Workload for Linux development with C++<\/h2>\n<p>Visual Studio 2017 and 2019 include the C\/C++ Linux Development workload. To install it, start the Visual Studio installer and choose to either install or modify an existing installation. Scroll to the bottom. Under the section \u201cOther Toolsets\u201d you will find Linux Development with C++. The workload installs in under 10 minutes. Learn more about installing the Linux development with C++ workload in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/download-install-and-setup-the-linux-development-workload?view=msvc-160\">documentation<\/a>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxWorkload.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-14285\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxWorkload.png\" alt=\"Linux Workload\" width=\"1295\" height=\"726\" \/><\/a><\/p>\n<h2>Opening projects<\/h2>\n<p>You will need a Linux machine, or you can use the <u><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-with-visual-studio-2019-and-windows-subsystem-for-linux-wsl\/\">Windows Subsystem for Linux<\/a>.<\/u> You can use any Linux distribution that has SSH, gdb, rsync, zip, and a compiler (clang or GCC) installed. In a Debian-based Linux environment, this is as easy as:<\/p>\n<pre class=\"prettyprint\">sudo apt update\r\nsudo apt install -y build-essential gdb rsync zip openssh-server<\/pre>\n<p>Start SSH with the following command:<\/p>\n<pre class=\"prettyprint\">sudo service start ssh<\/pre>\n<p>Learn more about options for creating a Linux environment in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/download-install-and-setup-the-linux-development-workload?view=msvc-160#options-for-creating-a-linux-environment\">documentation<\/a>.<\/p>\n<p>To create a new MSBuild-based Linux Console Application in Visual Studio, filter the language to C++, the platform to Linux, and select \u201cConsole Application\u201d.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27254\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD.png\" alt=\"Image Linux NPD\" width=\"1512\" height=\"968\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD.png 1512w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD-300x192.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD-1024x656.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_NPD-768x492.png 768w\" sizes=\"(max-width: 1512px) 100vw, 1512px\" \/><\/a><\/p>\n<p>This project will open a readme with some instructions about its capabilities. We will first select the project\u2019s platform toolset. Right-click on the project in the <strong>Solution Explorer<\/strong> and select <strong>Properties<\/strong>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27255\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset.png\" alt=\"Visual Studio's C++ Property Pages. The option Platform Toolset is selected from the General page.\" width=\"1167\" height=\"802\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset.png 1167w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset-300x206.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset-1024x704.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Toolset-768x528.png 768w\" sizes=\"(max-width: 1167px) 100vw, 1167px\" \/><\/a>There are four platform toolsets to choose from: GCC for Remote Linux, Clang for Remote Linux, GCC for Windows Subsystem for Linux, and Clang for Windows Subsystem for Linux. Select the toolset that matches your compilers and Linux environment and press OK. The \u201cRemote Linux\u201d toolsets require a SSH connection in the Connection Manager. The \u201cWindows Subsystem for Linux\u201d toolsets use Visual Studio\u2019s <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-with-visual-studio-2019-and-windows-subsystem-for-linux-wsl\/\">native support for WSL<\/a> and do not require SSH. In this tutorial, I\u2019ll use the GCC for Remote Linux toolset. Check out <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-with-visual-studio-2019-and-windows-subsystem-for-linux-wsl\/\">this tutorial<\/a> for more information on our native support for WSL.<\/p>\n<p>Now we can add a new remote connection to the Connection Manager. Select <strong>Tools &gt; Options &gt; Cross Platform &gt; Connection Manager<\/strong> to open the Connection Manager. You can add new connections with either password or private key authentication. Learn more about connecting to a remote Linux system in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/connect-to-your-remote-linux-computer?view=msvc-160&amp;viewFallbackFrom=vs-2019\">documentation<\/a>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27256\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection.png\" alt=\"The Visual Studio Connection Manager is open.\" width=\"1261\" height=\"731\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection.png 1261w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection-300x174.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection-1024x594.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_AddNewConnection-768x445.png 768w\" sizes=\"(max-width: 1261px) 100vw, 1261px\" \/><\/a><\/p>\n<p>After you enter your information, Visual Studio manages the connection to your Linux system where builds are performed. \u00a0If there are any problems, the build output points you directly to issues found in your code.<\/p>\n<p>The project system synchronizes your sources between Windows and Linux, and provides you with extensive control to manage this yourself if you need it. Right click on the project in <strong>Solution Explorer <\/strong>and choose <strong>Properties<\/strong>.<\/p>\n<ul>\n<li>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/general-linux?view=msvc-160\"><strong>General<\/strong><\/a> property page allows you to set options like what folders to use on the remote system and what the Configuration Type is for your output (an executable, static or dynamic library).<\/li>\n<li>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/debugging-linux?view=msvc-160\"><strong>Debugging<\/strong><\/a> page provides additional control over execution; for example, you can run additional commands before launching a program such as exporting the display to debug desktop apps.<\/li>\n<li>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/directories-linux?view=msvc-160\"><strong>VC++ Directories<\/strong><\/a> page provides options for controlling IntelliSense by providing additional directories to include or exclude.<\/li>\n<li>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/copy-sources-project?view=msvc-160\"><strong>Copy Sources<\/strong><\/a> property page allows you to specify whether to copy sources to the remote Linux system. You may not want to copy sources if you are working with a share or are managing your own synchronization through other means.<\/li>\n<li>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/c-cpp-linux?view=msvc-160\"><strong>C\/C++<\/strong><\/a> and <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/linker-linux?view=msvc-160\"><strong>Linker<\/strong><\/a> property page groups provide many options for controlling what flags are passed to the compiler. They also enable you to override the default setting to use g++ or clang++ and specify your own.<\/li>\n<li>Finally, the <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/prop-pages\/build-events-linux?view=msvc-160\"><strong>Build Events<\/strong><\/a> property page group provides the capability to run additional commands locally or remotely as part of the build process.<\/li>\n<\/ul>\n<p>Learn more about configuring a MSBuild-based Linux project in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/configure-a-linux-project?view=msvc-160\">documentation<\/a>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27261\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker.png\" alt=\"C++ Property Pages. The &quot;All Options&quot; page of the Linker section is selected.\" width=\"1175\" height=\"813\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker.png 1175w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker-300x208.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker-1024x709.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2017\/04\/Linux_Linker-768x531.png 768w\" sizes=\"(max-width: 1175px) 100vw, 1175px\" \/><\/a><\/p>\n<h2>Use the full power of Visual Studio productivity features with your Linux C++ code<\/h2>\n<p>IntelliSense is provided out of the box for GCC, Clang, and libstdc++. Visual Studio automatically <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/improvements-to-accuracy-and-performance-of-linux-intellisense\/\">copies the headers referenced by your project<\/a> from your Linux system to Windows to provide IntelliSense. Once you get going with your own code you can really see Visual Studio\u2019s productivity features in action.<\/p>\n<p><strong>Member List<\/strong> and <strong>Quick Info<\/strong>, shown in the screenshot below, are just two examples of the powerful IntelliSense features that make writing code easier and faster. <strong>Member List<\/strong> shows you a list of valid members from a type or namespace. Typing in \u201c-&gt;\u201d following an object instance in the C++ code will display a list of members, and you can insert the selected member into your code by pressing TAB or by typing a space or a period. <strong>Quick Info<\/strong> displays the complete declaration for any identifier in your code. In the screenshot below, Visual Studio is showing the list of accessible members of the SimpleServer object and the declaration of the <em>open<\/em> method.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxCodeEditing.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-14245\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxCodeEditing.png\" alt=\"Linux Code Editing\" width=\"1030\" height=\"646\" \/><\/a><\/p>\n<p>Refactoring, autocomplete, squiggles, reference highlighting, syntax colorization, and code snippets are some of the other useful productivity features that are helpful when you are writing and editing your code.<\/p>\n<p>Navigating in large codebases and jumping between multiple code files can be a tiring task. Visual Studio offers many great code navigation features, including <strong>Go To Definition<\/strong>, <strong>Go To Line\/Symbols\/Members\/Types<\/strong>, <strong>Find All References<\/strong>, <strong>View<\/strong> <strong>Call Hierarchy<\/strong>, <strong>Object Browser<\/strong>, and many more.<\/p>\n<p>The <strong>Peek Definition<\/strong> feature, as shown in the screenshot below, shows the definition inline without switching away from the code that you&#8217;re currently editing. You can find <strong>Peek Definition<\/strong> by placing the insertion point on a method that you want to explore and then right-clicking or pressing Alt+F12. In the screenshot below, the definition of the OpenCV face detection <em>detectMultiScale <\/em>method, in <em>objdetect.hpp<\/em>, is shown in an embedded window in the current .cpp file.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxPeekDefinition.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-14255\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxPeekDefinition.png\" alt=\"Linux Peek Definition\" width=\"1034\" height=\"647\" \/><\/a><\/p>\n<p>Our Linux support also integrates native Linux tooling like AddressSanitizer. Learn more about enabling ASAN in our <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/linux-asan-configuration?view=msvc-160\">documentation<\/a>.<\/p>\n<h2>Debugging and diagnosing issues<\/h2>\n<p>Visual Studio excels at helping you solve your development problems, and you can now use those capabilities with your C++ code on Linux. You can set breakpoints in your C++ code and press F5 to launch the debugger and run your code on your Linux machine. When a breakpoint is hit, you can watch the value of variables and complex expressions in the <strong>Autos<\/strong> and <strong>Watch<\/strong> tool windows as well as in the data tips on mouse hovering, view the call stack in the <strong>Call Stack<\/strong> window, and step in and step out of your code easily. You can also use conditions in your breakpoints to narrow in on specific problems. Likewise, you can set actions to record variable values to the output window. You can also inspect application threads or view disassembly.<\/p>\n<p>If you need to interact with your programs on Linux you can <a href=\"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/03\/30\/visual-c-for-linux-development\/#consolewindow\">use the Linux Console window from within Visual Studio<\/a>. To activate this window, use the menu <strong>Debug<\/strong> &gt; <strong>Linux Console<\/strong>. In the screenshot below you can see input being provided to the scanf call on line 24.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxConsoleWindow.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-14265\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxConsoleWindow.png\" alt=\"Linux Console Window\" width=\"1038\" height=\"649\" \/><\/a><\/p>\n<p>You can even attach to processes on your Linux machines to debug problems live. Open the <strong>Debug<\/strong> menu and select <strong>Attach to Process<\/strong>. As shown in the screenshot below select the SSH Connection type. You can then use the drop-down target menu to select a Linux machine. This will then enumerate the remote connections you have previously created.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxAttachToProcess.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-14275\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/LinuxAttachToProcess.png\" alt=\"Linux Attach to Process\" width=\"1037\" height=\"652\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-debugging-and-diagnostics\/\">See our debugging and diagnostics with C++ page<\/a> to learn more about our general capabilities.<\/p>\n<h2>Get started with Visual Studio Linux C\/C++ Development today<\/h2>\n<p>Learn more about <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/cmake-linux-project?view=msvc-160\">cross-platform CMake projects<\/a> and <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/linux\/create-a-new-linux-project?view=msvc-160\">MSBuild-based Linux projects<\/a> in our documentation. Please provide feedback from within Visual Studio by selecting the \u201cSend Feedback\u201d icon in the top right-hand corner of the IDE.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post was updated on December 11, 2020 Visual Studio 2017 introduced the Linux Development with C++ workload. We generally recommend Visual Studio\u2019s native support for CMake for all C++ Linux development. Visual Studio\u2019s CMake support allows you to target multiple platforms (Windows, a remote Linux system, the Windows Subsystem for Linux, embedded targets\u2026) with [&hellip;]<\/p>\n","protected":false},"author":2953,"featured_media":27256,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,279],"tags":[],"class_list":["post-14225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","category-linux"],"acf":[],"blog_post_summary":"<p>This post was updated on December 11, 2020 Visual Studio 2017 introduced the Linux Development with C++ workload. We generally recommend Visual Studio\u2019s native support for CMake for all C++ Linux development. Visual Studio\u2019s CMake support allows you to target multiple platforms (Windows, a remote Linux system, the Windows Subsystem for Linux, embedded targets\u2026) with [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/14225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/2953"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=14225"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/14225\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/27256"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=14225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=14225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=14225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}