{"id":1011,"date":"2026-05-03T17:31:59","date_gmt":"2026-05-04T00:31:59","guid":{"rendered":"https:\/\/sysprogs.com\/tutorials\/?p=1011"},"modified":"2026-08-27T20:02:59","modified_gmt":"2026-08-28T03:02:59","slug":"creating-embedded-projects-on-linux","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/CodeVROOM\/tutorials\/stm32\/linux\/","title":{"rendered":"Creating Embedded Projects on Linux"},"content":{"rendered":"<p>This tutorial shows how to create a basic STM32 project on Linux using CodeVROOM.<\/p>\n<p>Before you begin, install the following packages:<\/p>\n<table>\n<tbody>\n<tr>\n<td>Package<\/td>\n<td>Name in APT<\/td>\n<\/tr>\n<tr>\n<td>GCC for ARM<\/td>\n<td>gcc-arm-none-eabi<\/td>\n<\/tr>\n<tr>\n<td>Ninja<\/td>\n<td>ninja-build<\/td>\n<\/tr>\n<tr>\n<td>CMake<\/td>\n<td>cmake<\/td>\n<\/tr>\n<tr>\n<td>OpenOCD<\/td>\n<td>openocd<\/td>\n<\/tr>\n<tr>\n<td>Embedded GDB<\/td>\n<td>gdb-multiarch<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Also, make sure your system has a functioning xz executable, since CodeVROOM uses it to unpack the device packages.<\/p>\n<p>Once all the prerequisites have been fulfilled, <a href=\"https:\/\/sysprogs.com\/CodeVROOM\/download\/\">download<\/a> the latest CodeVROOM archive and unpack it.<\/p>\n<ol>\n<li>CodeVROOM for Linux is distributed in <strong>.tar.xz<\/strong> files that include all the necessary binaries. To start it, run CodeVROOM-&lt;platform&gt;:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-files.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1080\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-files.png\" alt=\"\" width=\"762\" height=\"496\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-files.png 762w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/01-files-300x195.png 300w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><\/a><\/li>\n<li>CodeVROOM does not need installation, so you can click &#8220;Run without installing&#8221;, or install it to any location of your choice:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/02-splash.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1081\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/02-splash.png\" alt=\"\" width=\"802\" height=\"450\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/02-splash.png 802w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/02-splash-300x168.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/02-splash-768x431.png 768w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/a><\/li>\n<li>The installation only takes a few seconds and simply copies the files to another location and creates shortcuts. Once installed, or ran in-place, the main window will look like this:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1082\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/03-wnd-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Select File-&gt;New-&gt;Project or use the toolbar command to open the project wizard selector. Select the CMake project wizard:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1084\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb.png\" alt=\"\" width=\"812\" height=\"427\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb.png 812w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb-300x158.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb-768x404.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/05-emb-390x205.png 390w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/a><a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/04-new.png\"><br \/>\n<\/a><\/li>\n<li>Proceed with the default choices for the project type:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-app.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1085\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-app.png\" alt=\"\" width=\"902\" height=\"730\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-app.png 902w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-app-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/06-app-768x622.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><\/li>\n<li>The next page allows selecting a toolchain to use. As of version 0.6, CodeVROOM only supports the embedded ARM toolchain (except the separate ESP32 wizard), and it needs to be pre-installed via a package manager. Once it is selected, CodeVROOM will show a list of devices compatible with the toolchain:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-getbsp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1086\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-getbsp.png\" alt=\"\" width=\"902\" height=\"730\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-getbsp.png 902w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-getbsp-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/07-getbsp-768x622.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a>Select the device and click &#8220;Install&#8221; to proceed with the installation.<\/li>\n<li>Once the package is installed, CodeVROOM will show the configuration options for the device. Proceed with the default ones:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-device.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1087\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-device.png\" alt=\"\" width=\"902\" height=\"730\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-device.png 902w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-device-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/08-device-768x622.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><\/li>\n<li>The next page allows choosing between basic project samples and vendor-supplied templates. Select &#8220;LEDBlink (FreeRTOS)&#8221; sample in the regular list:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-freertos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1088\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-freertos.png\" alt=\"\" width=\"902\" height=\"730\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-freertos.png 902w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-freertos-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/09-freertos-768x622.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><\/li>\n<li>Finally, let&#8217;s configure debugging settings. On Linux\/Mac CodeVROOM relies on the system-level openocd installation (<strong>sudo apt install openocd<\/strong>), so make sure it is installed. The wizard will automatically pre-select the device script, and will show a searchable drop-down of known debugging interfaces:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-debug-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1089\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-debug-1.png\" alt=\"\" width=\"902\" height=\"730\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-debug-1.png 902w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-debug-1-300x243.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/10-debug-1-768x622.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/a><\/li>\n<li>Select the settings that match your configuration and click &#8220;test&#8221; to verify them:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-test.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1090\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-test.png\" alt=\"\" width=\"802\" height=\"630\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-test.png 802w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-test-300x236.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/11-test-768x603.png 768w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/a><\/li>\n<li>Once the project got created, let&#8217;s modify it, adding the iteration counters to the threads. Add a g_Stats structure with 2 fields, and update threads to increment them within the loops:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1091\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/12-suggest-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Build the project (Ctrl-Shift-B or Ctrl-B, depending on the selected keyboard layout):<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1092\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/13-build-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Set a breakpoint before the call to HAL_GPIO_Init() and press F5 (or F11 for Eclipse keyboard layout) to start debugging:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1093\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/14-popups-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a>Once the breakpoint hits, you can hover the mouse over different expressions to see the values. You can also customize the primary and the secondary value view (e.g. Binary\/Hex or combined) via the Debug Expression Settings command.<\/li>\n<li>Resume debugging. Try hovering the mouse over g_Stats. CodeVROOM will show the live values of the fields without stopping the program:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1094\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/15-live-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a>Note that it only works for global variables that can be evaluated without stopping the target. For complex expressions (e.g. type casts), use the dedicated Live Watch window.<\/li>\n<li>Use the Debug-&gt;Windows-&gt;Globals command to open the Globals view:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1095\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/16-openglobals-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>There you can quickly search for variables containing a particular text. As of v0.6, you need to press Enter to expand the matching nodes, but future versions will support immediate temporary expansion:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1096\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/17-globals-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>You can also use the RTOS Objects view to see a live summary of threads, their stack usage, and global status:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1097\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/18-rtos-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Set a breakpoint in LED_Thread2 and open the Debug-&gt;Windows-&gt;Threads window:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1098\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/19-stacks-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Search for &#8220;Thread&#8221;. CodeVROOM will immediately highlight the matching frames: <a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1099\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/20-search-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Once all thread stacks got loaded, CodeVROOM will highlight other thread locations in the code. You can click the links with the thread\/frame info to switch to that frame:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1100\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/21-anotherthread-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a>If you used VisualGDB with Visual Studio, you could have noticed that viewing multiple threads\/frames slows down stepping. CodeVROOM is designed to completely avoid this bottleneck. Whenever you stop at a breakpoint, it will first show you the location of the stop, and then start loading (and progressively showing) all threads\/frames. If you continue execution before all threads got loaded, the background load will get cancelled, and the program will resume immediately.<\/li>\n<li>Just like in VisualGDB, you can edit various project properties via the &#8220;Properties&#8221; command in the Files window:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1101\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/05\/23-properties-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a>Note that the project, the workspace and the target all have different sets of properties.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to create a basic STM32 project on Linux using CodeVROOM. Before you begin, install the following<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[64],"tags":[77,74],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1011"}],"collection":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1011"}],"version-history":[{"count":5,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1011\/revisions"}],"predecessor-version":[{"id":1103,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1011\/revisions\/1103"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}