Я недавно обновился до Qt Creator 4.8.2.
Импортируя большой проект C ++, QTcreator не может распознать #include <Eigen/Dense>
, выдает фатальную ошибку и, по-видимому, отказывается от всех включаемых заголовков после для проверки синтаксиса. Как следствие, много ложных синтаксических предупреждений и ошибок отображаются.
В предыдущей версии QTcreator <Eigen/Dense>
также не распознавался, но без фатальных последствий для оставшейся проверки синтаксиса. Любопытно, что #include <Eigen>
распознается нормально, а синтаксический диагноз верен. Переключить все на <Eigen>
не вариант, так как это не распознается стандартными компиляторами. Проблема, по-видимому, конкретно влияет на проверку синтаксиса, другие функциональные возможности, такие как использование символов и т. Д., Работают.
Я проверил .pro-файл: все включения перечислены. Код прекрасно компилируется под make-сгенерированным пакетом make.
Вопросы:
- Могу ли я убедить QTcreator не прерывать дальнейшие включения, если одно из них не удалось?
- МожетЯ учу QTcreator принимать Eigen / Dense в качестве файла заголовка?
- Есть ли другие известные исправления?
Опции, которые я рассмотрел, но не могу выбрать:
- Переименование заголовков Eigen: структура определяется пакетом Eigen.
- Сборка с QTcreator: поскольку полная переносимость только с базовыми инструментами - определение проекта.
- Понижение класса QTcreator не является опцией, поскольку существующие дистрибутивы Linux (Suse Leap 15.1, также Tumbleweed) не поддерживают его.
Кажется, проблема в том, что QT Creator не может интерпретировать /
во включениях. Он также ломается здесь:
#include "constants.h"
#include "alglib/integration.h"
#include "basisfunctionciion.h"
Он отлично работает, если я заменю на #include "integration.h"
, но это не очень хорошее имя для включения.
.pro - 1500 строк,здесь упоминается окружение, где include:
SOURCES += CAPP/main_endless.cpp \
CMakeFiles/feature_tests.c \
CMakeFiles/feature_tests.cxx \
TOOLS/main_test.cpp \
LIBRARIES/alglib/integration.cpp \
LIBRARIES/alglib/interpolation.cpp \
LIBRARIES/alglib/linalg.cpp \
и т. д.
Обходной путь
Я ввел вспомогательные заголовочные файлы, например, qtEigenDense.h
:
/// QT creator cannot handle '/' in includes - workaround for Eigen/xxx and alglib/xxx.h
#include <Dense>
, которые отслеживают файлы и все же позволяют мне использовать отличный инструмент.