make IDEs aware of the headers

Andrey Butirsky butirsky at gmail.com
Sat Jan 7 15:40:27 GMT 2023


Hi all,

let me introduce my finding we probably want for all KDE's CMake-based 
projects eventually.

The idea is, wherever we add a source files to a project, we should also 
add a headers alongside:

|add_library(my_lib [STATIC|SHARED|MODULE] [source.cpp source.h ...]) 
add_executable(my_exe [source.cpp source.h]) target_sources(my_target 
<INTERFACE|PUBLIC|PRIVATE> [source.cpp source.h])|

That has zero impact for building the project, as the headers do not get 
compiled directly,
but declaring headers in a such way helps IDEs (Qt Creator, etc.) be 
aware of them and work with them properly.

For now, KWin MR 
<https://invent.kde.org/plasma/kwin/-/merge_requests/3400> exists which 
adds the most essential headers, but even to fully cover KWin alone that 
would probably require some sort of automation as it contains ~138 
CMakeLists.txt files.

Until that automation method is not found, I hope it's OK to add the 
headers manually or semi-automated 
<https://invent.kde.org/plasma/kwin/-/merge_requests/3400#note_593030>.


Hereby is the MR message with all the details:

> Nowadays, it's generally recommended to add headers alongside with 
> sources in CMake:
>
>>     note that .h header files were specified as sources too, not just
>>     the .cpp implementation files. *Headers listed as sources don’t
>>     get compiled directly on their own, but the effect of adding them
>>     is for the benefit of IDE generators* like Visual Studio, Xcode,
>>     Qt Creator, etc. This causes those headers to be listed in the
>>     project’s file list within the IDE, even if no source file refers
>>     to it via #include. This can make those headers easier to find
>>     during development and potentially aid things like refactoring
>>     functionality, etc.
>>
> https://crascit.com/2016/01/31/enhanced-source-file-handling-with-target_sources/ 
>
>
> Recent Qt Creator depends on it heavily:
>
>>         This means that the header files will get the same treatment
>>         as the source files.
>>
>>           * clang-tidy and clazy will be able to analyze them
>>           * The TODO plugin can find the TODOs in header files
>>           * The Test plugin can find the Google Tests defined in
>>             header files
>>
> https://www.qt.io/blog/qt-creator-6-cmake-update
> In my personal observations it should also help with source/header 
> jumps as it sometimes doesn't work reliably otherwise.
>
> Other IDEs should benefit too.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20230107/a43072d4/attachment-0001.htm>


More information about the Plasma-devel mailing list