[Development] "Auto projects" in CMake

Scott Bloom scott at towel42.com
Wed Oct 15 19:47:20 CEST 2025


There are several projects that are automatically generated when using cmake.

The two that I have come across recently are the XXX_qmlimportscan and XXX_other_files (where XXX is the project they were created for), there are likely others, but I'm early in my investigation.

The reason I haven't seen these earlier, is I have been using cmake + Qt since Qt3 days, and I have a ton of technical debt in my homegrown cmake Modules for working with Qt.  I'm only now using some of the new Qt built in functions for things like UI, rcc, qrc etc etc.

I understand the need for these, as they largely replace modules I had to solve with similar functionality.

The problem is, when using an IDE (you would never notice this using a ninja/makefile style build), the projects show up as top level folders, and make the library layout look weird.

I have a couple of variants of the same solutions to this, all using cmake target property "FOLDER"


  1.  Use a cmake cached variable for QT_AUTOPROJECT_FOLDER  with a default setting of QtAutoProjects (or similar) that would set all generated projects inside that folder in IDEs.  This is similar to the CMakePredefinedTargets folder that is used for top level cmake targets (INSTALL, PACKAGE and OTHERS)

The when the Qt cmake functions create a new project, setting the target property as such:
set_target_properties( ${PROJECT_NAME} PROPERTIES  FOLDER ${QT_AUTOPROJECT_FOLDER} )

Which would create a root level folder and place all the auto projects it underneath it.

  2.  Since the generated projects all contain the PROJECT they were created for, simply doing the following after each project is created
set_target_properties( ${PROJECT_NAME} PROPERTIES  FOLDER ${PARENT_PROJECT_NAME} )

Which would simply create a folder under the project with the same name as the before

  1.  The third simply combines the two
set_target_properties( ${PROJECT_NAME} PROPERTIES  FOLDER ${PARENT_PROJECT_NAME}/${QT_AUTOPROJECT_FOLDER}  )


The FOLDER property has no effect on cmake generators that do not support them, they do not create a "scope" of project names, its simply using folders in the IDE (I use this in Visual Studio and have also used it in VS Code, Xcode and others), so there should be no change to the normal build flow, nor any command line flow at all.



Thoughts?

I figured I would file an issue with a solution when I have it working.

Scott


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20251015/8b5e1dd9/attachment-0001.htm>


More information about the Development mailing list