Индекс CLion не разрешает некоторые включения в каталог проекта

У меня есть проект CLion С++, который имеет следующую структуру:

    project
       ---->my_includes
       |   ----> my_own.hpp
       ---->source
           ----> my_app
               ----> my_src.cpp

Первая строка my_src.cpp

#include "my_includes/my_own.hpp"

Я использую внешнюю систему сборки, которая требует этого формата включения. Проблема в том, что если я использую функцию в исходном файле, указанном в включенном заголовке, CLion говорит "Не могу найти my_own.hpp", если я попытаюсь навести курсор на включение.

Я попытался маркировать каталог include, содержащий источник или заголовки Project, но это не исправить. Любые идеи?

Ответ 1

Вам нужно создать CMakeLists.txt, чтобы CLion был счастлив. Достаточно объявить все исходные файлы, вам не нужно конвертировать ваши scons (или любую другую систему сборки) в cmake.

Вам даже не нужно писать CMakeLists.txt вручную, вы можете попросить CLion сделать это:

  • File | New CMake Project from Sources... (начиная с CLion 2019.2)
  • File | Import project ... | (старый CLion)

а затем укажите каталог, содержащий ваш проект.

Теперь отредактируйте сгенерированный CMakeLists.txt и добавьте команду cmake, чтобы сообщить CLion, где искать включения (фактически, чтобы сообщить компилятору, и CLion будет повторно использовать эту информацию).

Поскольку ваши исходные файлы используют include как #include "my_includes/my_own.hpp", вы должны указать cmake базовый каталог, содержащий каталог my_includes:

include_directories(.)

Где точка означает тот же каталог, что и каталог, содержащий CMakeLists.txt.

Я протестировал проект, воспроизводящий ваш макет, и из my_src.cpp я могу перейти к my_own.hpp.

Тогда для сборки вам все равно придется использовать scons в консоли. Также можно добавить команду cmake, add_custom_target(), которая будет вызывать ваши scons (или ваш make, или любой другой), так что вы также можете перейти от CLion к ошибкам сборки.