Russian Qt Forum
Ноябрь 23, 2024, 11:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Установка пути для header в QtCreator  (Прочитано 12205 раз)
qplace
Гость
« : Апрель 15, 2013, 14:55 »

Я собрал Qt5.0.2 и пытаюсь создать тестовый проект в QtCreator 2.7. До этого времени я работал с VS, и опыта работы с creator у меня никакого. Я создал тестовый проект по умолчанию (библиотека), и все что я пытаюсь сделать, так это указать на путь в другую директорию. Компилятор выдает ошибку (файл не найден), но редактор прекрасно этот файл показывает. Задаю директорию и так, и этак - ничего не выходит.
В приложении - зип проекта.
Буду очень признателен если кто может посмотреть почему не находится хедер
Записан
popper
Гость
« Ответ #1 : Апрель 15, 2013, 15:39 »

А поменять слеш на прямой в INCLUDEPATH пробовал?
Записан
qplace
Гость
« Ответ #2 : Апрель 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ом я не работал никогда.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #3 : Апрель 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 \

И абсолютных путей нужно избегать. Проект должен собираться в окружении, где таких путей может и не быть вовсе.
« Последнее редактирование: Апрель 15, 2013, 16:34 от ViTech » Записан

Пока сам не сделаешь...
qplace
Гость
« Ответ #4 : Апрель 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 так как было предложено,
я хочу указать директории где эти хедеры надо искать
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #5 : Апрель 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 будут выводиться актуальные значения переменных.
Записан

Пока сам не сделаешь...
qplace
Гость
« Ответ #6 : Апрель 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
}
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #7 : Апрель 15, 2013, 18:39 »

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

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

Пока сам не сделаешь...
qplace
Гость
« Ответ #8 : Апрель 15, 2013, 18:52 »

да! ДА! ДАААА!

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

Спасибо большое. Уфф. Я уж думал что придется продолжать с VS.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #9 : Апрель 15, 2013, 19:50 »

Это что, рекомендуется делать после каждого изменения .pro файла?

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

Пока сам не сделаешь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 23.