<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexander Movchan</title>
    <description>The latest articles on DEV Community by Alexander Movchan (@alexander_movchan_f11a820).</description>
    <link>https://dev.to/alexander_movchan_f11a820</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3551044%2F08d2e591-6ff1-450e-b468-6b1fa291f490.jpg</url>
      <title>DEV Community: Alexander Movchan</title>
      <link>https://dev.to/alexander_movchan_f11a820</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexander_movchan_f11a820"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Alexander Movchan</dc:creator>
      <pubDate>Thu, 16 Oct 2025 22:29:35 +0000</pubDate>
      <link>https://dev.to/alexander_movchan_f11a820/-9kh</link>
      <guid>https://dev.to/alexander_movchan_f11a820/-9kh</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/alexander_movchan_f11a820" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3551044%2F08d2e591-6ff1-450e-b468-6b1fa291f490.jpg" alt="alexander_movchan_f11a820"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/alexander_movchan_f11a820/qt-cmake-modern-approach-to-managing-iconsqrc-1n1e" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Qt + CMake: Modern Approach to Managing icons.qrc&lt;/h2&gt;
      &lt;h3&gt;Alexander Movchan ・ Oct 16&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#qt&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#automation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#resources&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>qt</category>
      <category>automation</category>
      <category>resources</category>
    </item>
    <item>
      <title>Qt + CMake: Modern Approach to Managing icons.qrc</title>
      <dc:creator>Alexander Movchan</dc:creator>
      <pubDate>Thu, 16 Oct 2025 22:22:00 +0000</pubDate>
      <link>https://dev.to/alexander_movchan_f11a820/qt-cmake-modern-approach-to-managing-iconsqrc-1n1e</link>
      <guid>https://dev.to/alexander_movchan_f11a820/qt-cmake-modern-approach-to-managing-iconsqrc-1n1e</guid>
      <description>&lt;h2&gt;
  
  
  The icons.qrc Nightmare: Every Qt Developer's Pain
&lt;/h2&gt;

&lt;p&gt;If you've been designing Qt applications for a while, you've probably faced the same &lt;code&gt;icons.qrc&lt;/code&gt; nightmare I have. You know the drill: your designer hands you a beautiful set of icons — 30, 50, maybe 100 different assets for your application. Each one needs to be properly integrated into your Qt project through that seemingly innocent XML file.&lt;/p&gt;

&lt;p&gt;But here's where the trouble begins. Every time you add a new icon, you find yourself opening that &lt;code&gt;icons.qrc&lt;/code&gt; file, manually typing (or copy-pasting) yet another line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;RCC&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;qresource&lt;/span&gt; &lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;"/icons"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;splashscreen.png&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;flags/usa.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;info/default.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;info/hover.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;info/pressed.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- ... and so on ... --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/qresource&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RCC&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, it doesn't seem so bad. A few icons here and there — what's the big deal? But as your project grows, so does the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The "oops I forgot" moment: You add new icons to the &lt;code&gt;icons/&lt;/code&gt; folder but forget to update &lt;code&gt;icons.qrc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The typo disaster: One misplaced character in the XML, and your entire resource system breaks.&lt;/li&gt;
&lt;li&gt;The merge conflict horror: When working in a team, multiple developers editing the same icons.qrc file inevitably leads to Git merge conflicts.&lt;/li&gt;
&lt;li&gt;The maintenance burden: Removing old icons? Better remember to delete them from both the folder AND the .qrc file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've lost count of how many hours I've wasted on what should be the simplest part of application development — managing static resources. It feels horrible to manually maintain what should be an automatically generated file by default.&lt;/p&gt;

&lt;p&gt;But what if I told you there's a better way? A method that eliminates this manual process entirely, automatically includes every icon in your directory, and turns this maintenance nightmare into a set-it-and-forget-it solution?&lt;/p&gt;

&lt;p&gt;In this article, I'll show you how to combine Qt with CMake's powerful file operations to automate &lt;code&gt;icons.qrc&lt;/code&gt; management once and for all. No more manual edits, no more forgotten icons, no more merge conflicts. Let's fix this problem properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traditional Approach: Manual icons.qrc Management
&lt;/h2&gt;

&lt;p&gt;Before we dive into the modern solution, let's take a closer look at the conventional way of handling icons in Qt projects. If you've worked with Qt for any length of time, this workflow will look painfully familiar.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Standard icons.qrc Structure
&lt;/h3&gt;

&lt;p&gt;Typically, your project structure looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
├── CMakeLists.txt
├── src/
|   ├── MainWindow.ui
|   ├── MainWindow.h
|   ├── MainWindow.cpp
|   └── main.cpp
└── icons/
    ├── add.png
    ├── delete.png
    ├── edit.png
    ├── settings.png
    └── icons.qrc  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And your &lt;code&gt;icons.qrc&lt;/code&gt; file contains all the manual entries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;RCC&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;qresource&lt;/span&gt; &lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;"/icons"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;add.png&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;delete.png&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;edit.png&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;settings.png&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/qresource&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RCC&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The CMake Integration
&lt;/h3&gt;

&lt;p&gt;In your CMakeLists.txt, you'd typically include it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cmake"&gt;&lt;code&gt;&lt;span class="nb"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;MyApp LANGUAGES CXX&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;GLOB_RECURSE PROJECT_SOURCES src/*.cpp&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;qt_add_resources&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;PROJECT_SOURCES icons/icons.qrc&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;add_executable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_SOURCES&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or maybe even in a simpler way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cmake"&gt;&lt;code&gt;&lt;span class="nb"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;MyApp LANGUAGES CXX&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;add_executable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    ...
    icons/icons.qrc
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Where It All Falls Apart
&lt;/h3&gt;

&lt;p&gt;When you have a lot of icons in multiple themes, the problems become impossible to ignore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Adding New Icons Dance:

&lt;ul&gt;
&lt;li&gt;Copy new icon file to icons/ folder&lt;/li&gt;
&lt;li&gt;Open icons.qrc in editor&lt;/li&gt;
&lt;li&gt;Scroll to bottom of the file&lt;/li&gt;
&lt;li&gt;Add new new_icon.png&lt;/li&gt;
&lt;li&gt;Save and rebuild&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Removal Nightmare:

&lt;ul&gt;
&lt;li&gt;Remove icon file from icons/ folder&lt;/li&gt;
&lt;li&gt;Open icons.qrc&lt;/li&gt;
&lt;li&gt;Search for the corresponding entry&lt;/li&gt;
&lt;li&gt;Delete the line&lt;/li&gt;
&lt;li&gt;Save and rebuild&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Team Collaboration Headaches:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Auto-merging icons/icons.qrc
CONFLICT &lt;span class="o"&gt;(&lt;/span&gt;content&lt;span class="o"&gt;)&lt;/span&gt;: Merge conflict &lt;span class="k"&gt;in &lt;/span&gt;icons/icons.qrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'd end up with merge conflicts that look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;lt; HEAD
        &amp;lt;file&amp;gt;new_feature_icon.png&amp;lt;/file&amp;gt;
&lt;span class="o"&gt;=======&lt;/span&gt;
        &amp;lt;file&amp;gt;another_feature_icon.png&amp;lt;/file&amp;gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; feature-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the next section, I'll show you how to eliminate this manual process completely using CMake's powerful file operations. No more editing XML, no more merge conflicts, no more forgotten icons.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modern Solution: Automated icons.qrc Generation with CMake
&lt;/h2&gt;

&lt;p&gt;Now for the part you've been waiting for — how to eliminate the manual work completely. The solution lies in using CMake's file operations to automatically generate our icons.qrc file during the build process.&lt;br&gt;
Start by creating a cmake_utils/find_assets.cmake file in your project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cmake"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Copyright (c) 2025 Oleksandr Movchan&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Permission is hereby granted, free of charge, to any person obtaining a copy&lt;/span&gt;
&lt;span class="c1"&gt;# of this software and associated documentation files (the "Software"), to deal&lt;/span&gt;
&lt;span class="c1"&gt;# in the Software without restriction, including without limitation the rights&lt;/span&gt;
&lt;span class="c1"&gt;# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;/span&gt;
&lt;span class="c1"&gt;# copies of the Software, and to permit persons to whom the Software is&lt;/span&gt;
&lt;span class="c1"&gt;# furnished to do so, subject to the following conditions:&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# The above copyright notice and this permission notice shall be included in all&lt;/span&gt;
&lt;span class="c1"&gt;# copies or substantial portions of the Software.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;/span&gt;
&lt;span class="c1"&gt;# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;/span&gt;
&lt;span class="c1"&gt;# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;/span&gt;
&lt;span class="c1"&gt;# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;/span&gt;
&lt;span class="c1"&gt;# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;/span&gt;
&lt;span class="c1"&gt;# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;/span&gt;
&lt;span class="c1"&gt;# SOFTWARE.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# =======================================================================&lt;/span&gt;
&lt;span class="c1"&gt;# FUNCTION: generate_icons_qrc&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Automatically generates a Qt Resource File (.qrc) for icon assets.&lt;/span&gt;
&lt;span class="c1"&gt;# Specifically designed for managing icons with fixed prefix and supported formats.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# USAGE:&lt;/span&gt;
&lt;span class="c1"&gt;#   generate_icons_qrc(&lt;/span&gt;
&lt;span class="c1"&gt;#       ${CMAKE_CURRENT_SOURCE_DIR}/icons&lt;/span&gt;
&lt;span class="c1"&gt;#       ${CMAKE_CURRENT_BINARY_DIR}/icons.qrc&lt;/span&gt;
&lt;span class="c1"&gt;#   )&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# PARAMETERS:&lt;/span&gt;
&lt;span class="c1"&gt;#   icons_directory - Input directory containing icon files&lt;/span&gt;
&lt;span class="c1"&gt;#   output_file     - Path where the generated .qrc file will be written&lt;/span&gt;
&lt;span class="c1"&gt;# =======================================================================&lt;/span&gt;

&lt;span class="nb"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;generate_icons_qrc icons_directory output_file&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;IS_ABSOLUTE &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;absolute_output_file &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;else&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nb"&gt;get_filename_component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;absolute_output_file &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; ABSOLUTE BASE_DIR &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_CURRENT_BINARY_DIR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;IS_ABSOLUTE &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;absolute_icons_directory &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;else&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nb"&gt;get_filename_component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;absolute_icons_directory &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; ABSOLUTE BASE_DIR &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_CURRENT_SOURCE_DIR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Validate that the icons directory exists&lt;/span&gt;
    &lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;NOT EXISTS &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;WARNING &lt;span class="s2"&gt;"Icons directory not found: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Create an empty .qrc file to prevent build errors&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;WRITE &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="s2"&gt;"&amp;lt;RCC&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    &amp;lt;qresource prefix=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/icons&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    &amp;lt;/qresource&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/RCC&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;return&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Recursively find all supported icon files&lt;/span&gt;
    &lt;span class="c1"&gt;# Fixed formats: SVG, PNG, ICO (most common icon formats, might be extended if needed)&lt;/span&gt;
    &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;GLOB_RECURSE icon_files
        &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/*.svg
        &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/*.png
        &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/*.ico
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Provide feedback about the number of icons found&lt;/span&gt;
    &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;LENGTH icon_files icon_count&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;STATUS &lt;span class="s2"&gt;"Generated &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icon_count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; icons"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Get output directory path&lt;/span&gt;
    &lt;span class="nb"&gt;get_filename_component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;output_dir &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; DIRECTORY&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Create output dir if not exists&lt;/span&gt;
    &lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;NOT EXISTS &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;MAKE_DIRECTORY &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Start building the QRC file content with fixed prefix "/icons"&lt;/span&gt;
    &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;QRC_CONTENT &lt;span class="s2"&gt;"&amp;lt;?xml version=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;1.0&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; encoding=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;UTF-8&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;QRC_CONTENT &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;QRC_CONTENT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;RCC&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    &amp;lt;qresource prefix=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/icons&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Process each icon file and add it to the QRC content&lt;/span&gt;
    &lt;span class="nb"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;icon_file &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icon_files&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Get relative path to output directory&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;RELATIVE_PATH relative_path &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;output_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icon_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;RELATIVE_PATH alias_name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_icons_directory&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;icon_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Normalize path separators to forward slashes for cross-platform compatibility&lt;/span&gt;
        &lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;REPLACE &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"/"&lt;/span&gt; relative_path &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;relative_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Using alias for saving virtual structure of folders in Qt resource file&lt;/span&gt;
        &lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;REPLACE &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"/"&lt;/span&gt; alias_name &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;alias_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Add the icon entry to the QRC content&lt;/span&gt;
        &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;QRC_CONTENT &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;QRC_CONTENT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;        &amp;lt;file alias=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;alias_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;relative_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;endforeach&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Close the QRC XML structure&lt;/span&gt;
    &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;QRC_CONTENT &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;QRC_CONTENT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;    &amp;lt;/qresource&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/RCC&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Write the complete QRC content to the output file&lt;/span&gt;
    &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;WRITE &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;absolute_output_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;QRC_CONTENT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;endfunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# =======================================================================&lt;/span&gt;
&lt;span class="c1"&gt;# EXAMPLE USAGE:&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Generate icons.qrc for your project:&lt;/span&gt;
&lt;span class="c1"&gt;# generate_icons_qrc(&lt;/span&gt;
&lt;span class="c1"&gt;#     ${CMAKE_CURRENT_SOURCE_DIR}/icons&lt;/span&gt;
&lt;span class="c1"&gt;#     ${CMAKE_CURRENT_BINARY_DIR}/icons.qrc&lt;/span&gt;
&lt;span class="c1"&gt;# )&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Then include it in your Qt project:&lt;/span&gt;
&lt;span class="c1"&gt;# qt_add_resources(PROJECT_SOURCES&lt;/span&gt;
&lt;span class="c1"&gt;#     ${CMAKE_CURRENT_BINARY_DIR}/icons.qrc&lt;/span&gt;
&lt;span class="c1"&gt;# )&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# =======================================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I would definitely recommend putting this function in a separate file, like find_assets.cmake and then using it for each project with icons:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cmake"&gt;&lt;code&gt;&lt;span class="nb"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;MyApp LANGUAGES CXX&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;cmake_utils/find_assets.cmake&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;generate_icons_qrc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;icons &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_CURRENT_BINARY_DIR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/icons.qrc&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;qt_add_resources&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;PROJECT_SOURCES &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_CURRENT_BINARY_DIR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/icons.qrc&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced: Relative Paths Supported
&lt;/h3&gt;

&lt;p&gt;The generated file will automatically handle nested directory structures:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;RCC&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;qresource&lt;/span&gt; &lt;span class="na"&gt;prefix=&lt;/span&gt;&lt;span class="s"&gt;"/icons"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"search.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/search.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/dark/info/default.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/dark/info/default.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/dark/info/disabled.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/dark/info/disabled.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/dark/info/hover.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/dark/info/hover.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/dark/info/pressed.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/dark/info/pressed.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/dark/remove/default.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/dark/remove/default.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/light/info/default.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/light/info/default.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/light/info/disabled.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/light/info/disabled.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/light/info/hover.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/light/info/hover.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/light/info/pressed.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/light/info/pressed.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;file&lt;/span&gt; &lt;span class="na"&gt;alias=&lt;/span&gt;&lt;span class="s"&gt;"theme/light/remove/default.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;../../icons/theme/light/remove/default.svg&lt;span class="nt"&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/qresource&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RCC&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage in Your Code
&lt;/h2&gt;

&lt;p&gt;The best part? Your C++ code doesn't change at all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use icons exactly as before - no code changes needed!&lt;/span&gt;
&lt;span class="n"&gt;QIcon&lt;/span&gt; &lt;span class="nf"&gt;lightInfoIconDefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":/icons/theme/light/info/default.svg"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;QIcon&lt;/span&gt; &lt;span class="nf"&gt;darkInfoIconDefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":/icons/theme/dark/info/default.svg"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion: Why This Approach Wins
&lt;/h2&gt;

&lt;p&gt;After implementing this solution across multiple projects, the benefits are undeniable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Zero Maintenance: Add icons to the folder — they're automatically included&lt;/li&gt;
&lt;li&gt;✅ No More Merge Conflicts: Generated file, no team coordination needed&lt;/li&gt;
&lt;li&gt;✅ Error-Free: No typos in XML paths&lt;/li&gt;
&lt;li&gt;✅ Scalable: Works with any count of icons&lt;/li&gt;
&lt;li&gt;✅ Fast: Regenerates only when icons change&lt;/li&gt;
&lt;li&gt;✅ Flexible: Easy to extend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The manual &lt;code&gt;icons.qrc&lt;/code&gt; approach is a relic from a time when we didn't have better build system tools. With modern CMake, we can automate this tedious process and focus on what really matters — building great applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next Steps:
&lt;/h3&gt;

&lt;p&gt;Try implementing this in your current Qt project. Once you experience the freedom of automatic icon management, you'll never go back to manual editing. And don't forget to remove your old &lt;code&gt;icons.qrc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you prefer to keep the file in the same location, simply add it to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Auto-generated Qt resource files
icons.qrc
generated_*.qrc

# Build directories
build/
*-build/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Have questions or improvements? Share your thoughts in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>qt</category>
      <category>automation</category>
      <category>resources</category>
    </item>
  </channel>
</rss>
