Hi CMake fans: (Skip to the last paragraph for my question.)
KI18N provides the CMake macro “ki18n_wrap_ui()”, which is used like this: > ki18n_wrap_ui( myApp_SRCS myApp_dialog.ui ) or like this (since KF 5.62): > ki18n_wrap_ui( myApp myApp_dialog.ui ) In both cases it creates “ui_myApp_dialog.h” using `uic`, which contains a C++ class for this dialog. This header file is added to the list “myApp_SRCS” or to the target “myApp”. Internally, it works roughly as follows: 1. Generate the ui_....h filename (in the build/ directory): > get_filename_component(_basename ${_tmp_FILE} NAME_WE) > set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h) 2. Create this C++ .h file [...] 3. Add this filename as source file to the target / SRCS list: > if(TARGET ${_sources}) > target_sources(${_sources} PRIVATE ${_header}) > else() > list(APPEND ${_sources} ${_header}) > endif() Now I wonder why this *header file* is added as a *source file* to the target. Other source files will include <ui_myApp_dialog.h>, so it should be enough when this header file is found somewhere in the include search paths. Is this how source file lists of a CMake target work? .cpp source files are compiled to .o files, and .h source files are only used as #include search path? Cheers, David