Я смотрел на исходный код KeepassXC , с Clion в качестве моей IDE выбора.Немного покопавшись и переместившись по исходному коду, я заметил, что один из исходных файлов имеет следующую директиву #include
:
#include "ui_MainWindow.h"
с красным подчеркиванием.При наведении курсора мыши на него появляется «ui_MainWindow.h 'not found».
Файл CMakeLists.txt
проекта содержит три типа сборки:
- Debug
- Релиз
- Релиз с отладочной информацией
и, как только все три типа сборки будут успешно собраны, файл, который должен искать CLion, находится в следующем месте:
cmake-build-(debug|release|relwithdebuginfo)
└── src
└── keepassx_core_autogen
└── include
├── moc_KMessageWidget.cpp
├── ui_AboutDialog.h
├── ui_CategoryListWidget.h
├── ui_ChangeMasterKeyWidget.h
├── ui_CloneDialog.h
├── ui_CsvImportWidget.h
├── ui_DatabaseOpenWidget.h
├── ui_DatabaseSettingsWidgetEncryption.h
├── ui_DatabaseSettingsWidgetGeneral.h
├── ui_DatabaseSettingsWidget.h
├── ui_DetailsWidget.h
├── ui_EditEntryWidgetAdvanced.h
├── ui_EditEntryWidgetAutoType.h
├── ui_EditEntryWidgetHistory.h
├── ui_EditEntryWidgetMain.h
├── ui_EditEntryWidgetSSHAgent.h
├── ui_EditGroupWidgetMain.h
├── ui_EditWidget.h
├── ui_EditWidgetIcons.h
├── ui_EditWidgetProperties.h
├── ui_EntryAttachmentsWidget.h
├── ui_MainWindow.h
├── ui_PasswordGeneratorWidget.h
├── ui_SearchWidget.h
├── ui_SettingsWidgetGeneral.h
├── ui_SettingsWidgetSecurity.h
├── ui_SetupTotpDialog.h
├── ui_TotpDialog.h
└── ui_WelcomeWidget.h
После пары часов попыток заставить это работать, я заметил кое-что странное.Красное подчеркивание исчезнет (и навигация по коду тоже будет работать), только если я соберу проект в режиме отладки (т.е. он выберет файл только из cmake-build-debug
).Если я очищу отладочную сборку и использую сборку выпуска, я не смогу заставить CLion выбрать файл из cmake-build-release
.То же самое относится к cmake-build-relwithdebinfo
.
Код компилируется и работает просто отлично, что означает, что конфигурация CMake верна.