Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: qplace от Апрель 15, 2013, 14:55



Название: Установка пути для header в QtCreator
Отправлено: qplace от Апрель 15, 2013, 14:55
Я собрал Qt5.0.2 и пытаюсь создать тестовый проект в QtCreator 2.7. До этого времени я работал с VS, и опыта работы с creator у меня никакого. Я создал тестовый проект по умолчанию (библиотека), и все что я пытаюсь сделать, так это указать на путь в другую директорию. Компилятор выдает ошибку (файл не найден), но редактор прекрасно этот файл показывает. Задаю директорию и так, и этак - ничего не выходит.
В приложении - зип проекта.
Буду очень признателен если кто может посмотреть почему не находится хедер


Название: Re: Установка пути для header в QtCreator
Отправлено: popper от Апрель 15, 2013, 15:39
А поменять слеш на прямой в INCLUDEPATH пробовал?


Название: Re: Установка пути для header в QtCreator
Отправлено: qplace от Апрель 15, 2013, 15:50
Да, пробовал. Не помогает. Пробовал такие варианты:
c:/test/exports
c:/test/exports/
C:/test/exports/
c:\test\exports
c:\test\exports\
C:\test\exports\

В зипе лежит простейший проект сгенеренный creator-ом, с директорией и файлом который я пытаюсь включить в проект.
Редактор файл видит, а компилятор нет.

Вообще непонятно. В VS можно посмотреть "advanced options", как среда разворачивает настройки для компилятора;
в QtCreator по-моему такого нет, поэтому непонятно какие опции передаются в компилятор. Но может быть непонятно только
мне, поскольку с creatorом я не работал никогда.


Название: Re: Установка пути для header в QtCreator
Отправлено: ViTech от Апрель 15, 2013, 16:31
В файле проекта надо указывать пути относительно каталога, в котором этот *.pro файл и находится.
Например:
Код:
INCLUDE_DIR = . # Текущий каталог, но, по-хорошему, должен быть include
EXPORTS_DIR = $${INCLUDE_DIR}/../exports

INCLUDEPATH += $${INCLUDE_DIR} \

DEPENDPATH += $$INCLUDEPATH

HEADERS += $${INCLUDE_DIR}/libtest_global.h \
           $${EXPORTS_DIR}/test.h \

SOURCE_DIR = src

SOURCES += $${SOURCE_DIR}/main.cpp \
           $${SOURCE_DIR}/Gui/MainWindow.cpp \

И абсолютных путей нужно избегать. Проект должен собираться в окружении, где таких путей может и не быть вовсе.


Название: Re: Установка пути для header в QtCreator
Отправлено: qplace от Апрель 15, 2013, 16:54
К сожалению не помогло.
Ошибка по-прежнему:
C:\test\libtest\libtest.cpp:1: error: C1083: Cannot open include file: 'test.h': No such file or directory

 Вот мой pro:

QT       -= gui

TARGET = libtest
TEMPLATE = lib

DEFINES += LIBTEST_LIBRARY

INCLUDE_DIR = .
EXPORTS_DIR = $${INCLUDE_DIR}/../exports

INCLUDEPATH = $${INCLUDE_DIR} $${EXPORTS_DIR}

HEADERS += libtest.h \
        libtest_global.h \
        $${EXPORTS_DIR}/test.h \

SOURCES += libtest.cpp

unix:!symbian {
    maemo5 {
        target.path = /opt/usr/lib
    } else {
        target.path = /usr/lib
    }
    INSTALLS += target
}

Дополнительный вопрос: я не хочу указывать каждый хедер в HEADERS так как было предложено,
я хочу указать директории где эти хедеры надо искать


Название: Re: Установка пути для header в QtCreator
Отправлено: ViTech от Апрель 15, 2013, 17:55
INCLUDEPATH = $${INCLUDE_DIR} $${EXPORTS_DIR}

Скорее надо так, с разделителем "\":
Код:
INCLUDEPATH = $${INCLUDE_DIR} \
    $${EXPORTS_DIR}

DEPENDPATH += $$INCLUDEPATH
DEPENDPATH нужен, чтобы проект пересобирался, если будет изменен заголовочный файл, иначе может на его изменение не отреагировать.

Дополнительный вопрос: я не хочу указывать каждый хедер в HEADERS так как было предложено,
я хочу указать директории где эти хедеры надо искать

Хедеры можно и не указывать, если они напрямую к проекту не относятся. Указывать нужно для QtCreator, чтобы знать какие файлы проекта отображать для редактирования. И для системы сборки qmake, если в хедерах потомки от QObject с макросом Q_OBJECT, чтобы moc вызвать для нужных файлов. И еще каких-нибудь случаев :).

Посмотреть значения переменных в файле проекта можно с помощью message:
Код:
message($${INCLUDE_DIR})
message($${INCLUDEPATH})
message($${HEADERS})
Во время выполнения qmake будут выводиться актуальные значения переменных.


Название: Re: Установка пути для header в QtCreator
Отправлено: qplace от Апрель 15, 2013, 18:12
Увы, таже ошибка.

А вы используете Qt5.0.2 с qtCreator2.7 под виндовс7?

QT       -= gui

TARGET = libtest
TEMPLATE = lib

DEFINES += LIBTEST_LIBRARY

INCLUDE_DIR = .
EXPORTS_DIR = $${INCLUDE_DIR}/../exports

INCLUDEPATH = $${INCLUDE_DIR} \
    $${EXPORTS_DIR}

message($${INCLUDEPATH})

DEPENDPATH = $${INCLUDEPATH}

HEADERS += libtest.h \
        libtest_global.h \
        $${EXPORTS_DIR}/test.h \

SOURCES += libtest.cpp

unix:!symbian {
    maemo5 {
        target.path = /opt/usr/lib
    } else {
        target.path = /usr/lib
    }
    INSTALLS += target
}


Название: Re: Установка пути для header в QtCreator
Отправлено: ViTech от Апрель 15, 2013, 18:39
А вы используете Qt5.0.2 с qtCreator2.7 под виндовс7?

Да, они и есть. И с таким pro-файлом собирается нормально. Вы после изменения и сохранения pro-файла, делали "Build/Run qmake" ("Сборка/Запустить qmake") для проекта? Это полезно периодически делать, равно как и полную пересборку проекта :). Visual Studio в этом отношении лучше отслеживает изменения в файлах проекта.


Название: Re: Установка пути для header в QtCreator
Отправлено: qplace от Апрель 15, 2013, 18:52
да! ДА! ДАААА!

Заработало! Это было то что вы сказали (Build/Run qmake). Это что, рекомендуется делать после каждого изменения .pro файла?

Спасибо большое. Уфф. Я уж думал что придется продолжать с VS.


Название: Re: Установка пути для header в QtCreator
Отправлено: ViTech от Апрель 15, 2013, 19:50
Это что, рекомендуется делать после каждого изменения .pro файла?

Лучше сделать, чем не сделать :). Не зря же это в пункт меню вынесли. После сохранения измененного pro-файла QtCreator обновляет свою структуру проектов, но надо еще qmake для самого проекта вызвать, чтобы обновились Makefile, похоже не всегда это корректно происходит. Ну и еще, кроме pro-файлов бывают всякие *.pri или еще какие. Поэтому, после серьезных изменений в pro-файлах, лучше самому запустить qmake и полностью пересобрать проект.