Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake, QtCreator and header files

This is not exactly a compilation related problem, but much more a visual issue ...

I have a project, set up with CMake (this is not a Qt project). When I open this project with QtCreator it nicely finds all the related files, and the files in the project browser are in alphabetical order like:

Project
 + abc.cpp
 + abc.h
 + def.cpp
 + def.h

However, if I work with QtCreator and a QMake based project, the headers and sources are nicely separated like:

Project
 + Headers
 |  + abc.h
 |  + def.h
 + Sources 
    + abc.cpp
    + def.cpp

Question: How to achieve this separation of headers and sources with Qt Creator? I have tried with SOURCE_GROUP("Headers" FILES abc.h def.h) and although that this works (to some extent) with Visual Studio, it does not work with Qt Creator. Any other tips?

like image 930
Ferenc Deak Avatar asked Nov 01 '22 03:11

Ferenc Deak


1 Answers

Specifically for CMake, do something like:

ADD_CUSTOM_COMMAND(OUTPUT
    ${CMAKE_BINARY_DIR}/include/res.h ${CMAKE_BINARY_DIR}/Sources/abc.cpp
    COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_BINARY_DIR}/Headers/abc.h
DEPENDS ${CMAKE_SOURCE_DIR}/resources/res.gen)

For further options and details:

  • [CMake] Generated Source Files

Of course you can still use Qt Creator if you like for editing your files. In the Qt Creator at the main control panel, in the upper left menu you need to select:

File > New File or Project > Files and Classes > C++ :

Then you have three options:

  • C++ Class: This option generate both sub-folders for source file and header file, automatically including a header and a source file into the respective folders.
  • C++ Source File: This will create and add only the source file with the respective sub-folder to your project.
  • C++ Header File: This will create and add only header file with the respective sub-folder to your project.

Select the one you need and it will be under your project folder organized in the way you want it.

like image 189
Thiago Oliveira Avatar answered Nov 10 '22 00:11

Thiago Oliveira