Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Составление файлов проектов, помогите составить файлы проектов 
V
    Опции темы
null56
Дата 2.2.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



У меня есть небольшой опыт создания make файлов, но в qt это должен делать qmake, поэтому проблема и возникла
Задача в следующем:
есть три папки, для простоты: 1, 2, common
В папках 1 и 2 отдельные проекты, в папке common инклюды, которые может использовать проект 1 или 2.

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

Хотел спросить у кого есть опыт создания больших проектов на qt, поделитесь опытом, как правильно создать файлы проектов или альтернативные способы решения данной проблемы...

Заранее благодарен за помощь
PM MAIL   Вверх
SABROG
Дата 2.2.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Если в папке common существуют подпапки, то поиск в них производиться не будет. Поэтому надо жестко прописывать каждую. Также надо убедиться, что нигде в заголовках нет подобных относительных путей:

Код

#include "../header.h"


Я так использовал:
Код

INCLUDEPATH += include \
    include/libxml \
    include/iconv \
    contrib


По поводу "мусора", который создает компилятор. С этим я борюсь так:

Код

CONFIG(debug, debug|release) { 
    CONFIG += console
    QMAKE_CXXFLAGS_DEBUG += -pg
    QMAKE_LFLAGS_DEBUG += -pg
    OBJECTS_DIR = tmp/debug
    MOC_DIR = tmp/debug
    UI_HEADERS_DIR = tmp/debug
    RCC_DIR += tmp/debug
}
else { 
    OBJECTS_DIR = tmp/release
    MOC_DIR = tmp/release
    UI_HEADERS_DIR = tmp/release
    RCC_DIR += tmp/release
}


Т.е. для каждой версии сборки создается "временная" папочка, чтобы не засорять исходники.

Это сообщение отредактировал(а) SABROG - 2.2.2009, 22:20


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
null56
Дата 3.2.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



Нет, в папке common все находится без поддиректорий и относительные пути нигде не указаны, я хочу, чтобы искал именно по мейк целям...
Супер по поводу твоей борьбы с мусором, но откуда инфу ты берешь по составлению файла проекта?
PM MAIL   Вверх
SABROG
Дата 3.2.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(null56 @  3.2.2009,  09:42 Найти цитируемый пост)
откуда инфу ты берешь по составлению файла проекта? 

Из ассистента, плюс эксперименты.

Если в папках 1 и 2 - отдельные проекты, то стоит в каждой папке создать свой .pro файл, затем создать общий .pro файл, который будет собирать оба проекта. В нем прописать ключ SUBDIRS:

Код

SUBDIRS = 1 \
           2


Если важен порядок сборки, то еще и это:

Код

CONFIG += ordered



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
null56
Дата 3.2.2009, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



Да, у меня отдельные проекта, там находятся отдельные про файлы... но вот про порядок сборки поподробнее можно?
У меня проблема вчера была, что один из проектов не мог найти объектники из папки common
вот пример одного из моих про файлов, сейчас туда добавил еще твои конфиги... буду дальше пробовать... файлы ssl-socket.* находятся в папке common и он выдавал undefine reference на некоторые методы класса
Код

QT += network \
    sql
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . \
                ../common/

HEADERS +=      socket_event.h \
#               ssl_socket.h \
                ssl_server.h \
                handle.h

# Input
SOURCES += main.cpp \
                socket_event.cpp \
#               ssl_socket.cpp \
                ssl_server.cpp \
                handle.cpp


Это сообщение отредактировал(а) null56 - 3.2.2009, 10:14
PM MAIL   Вверх
null56
Дата 3.2.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



объясни пожалуйста вот эту строчку?
Код

CONFIG(debug, debug|release) { 

PM MAIL   Вверх
just_geek
Дата 3.2.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Проверка условия.
Код

CONFIG(debug, debug|release) { 
# компилим в debug
}
else { 
# компилим в release
}


В ассистенте все ж есть

Цитата

CONFIG(config)
[Conditional]
This function can be used to test for variables placed into the CONFIG variable. This is the same as regular old style (tmake) scopes, but has the added advantage a second parameter can be passed to test for the active config. As the order of values is important in CONFIG variables (i.e. the last one set will be considered the active config for mutually exclusive values) a second parameter can be used to specify a set of values to consider. For example:
Код

         CONFIG = debug
         CONFIG += release
         CONFIG(release, debug|release):message(Release build!) #will print
         CONFIG(debug, debug|release):message(Debug build!) #no print

Because release is considered the active setting (for feature parsing) it will be the CONFIG used to generate the build file. In the common case a second parameter is not needed, but for specific mutual exclusive tests it is invaluable. 

PM MAIL   Вверх
null56
Дата 3.2.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



Все нашел, спасибо... это по qmake надо было искать, а я чо - то тупил....
Один вопросик только непонятный пока мне
Почему
Код

INCLUDEPATH += . \
        ../common/

HEADERS +=    SocketEvent.h

# Input
SOURCES += main.cpp \
        SocketEvent.cpp


Код

qmake server_db.pro
WARNING: Failure to find: SocketEvent.cpp
WARNING: Failure to find: SocketEvent.h


хотя 
Код

ls ../common/ | grep SocketEvent
SocketEvent.cpp
SocketEvent.h


Не ясно.. что не сделал?
PM MAIL   Вверх
SABROG
Дата 3.2.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(null56 @  3.2.2009,  10:12 Найти цитируемый пост)
что один из проектов не мог найти объектники из папки common

Откуда *объектники* вообще взялись в папке common? Они генерятся на этапе компиляции или это сторонние файлы скомпиленные ранее?

Цитата(null56 @  3.2.2009,  11:26 Найти цитируемый пост)
объясни пожалуйста вот эту строчку?

Она означает следующее. Если в CONFIG текущая конфигурация "debug" (CONFIG += debug), то условие выполняется (true), при этом второй параметр означает что, если конфигурация не debug, то она release. (взаимоисключающая конфигурация), при этом условие не выполняется (false). В результате, если опция стоит debug_and_release, то оба условия выполняются и для каждого makefile'a прописывается своя конфигурация.

Код

SOURCES += main.cpp \
        SocketEvent.cpp

INCLUDEPATH не влияет на исходники, т.ч. пути к ним надо явно прописывать

Код

SOURCES += main.cpp \
        ../common/SocketEvent.cpp


И даже после этого я не уверен, что будет работать. Т.к. одно время у меня была проблема с относительными путями и решилась она только после того как я жестко с диском прописал полный путь.

Это сообщение отредактировал(а) SABROG - 3.2.2009, 12:26


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
null56
Дата 3.2.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



SABROG , глянь чуть выше, почему не видит файлы?

PM MAIL   Вверх
SABROG
Дата 3.2.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Сервак глючит жестко...
Цитата

Bad Request

Your browser sent a request that this server could not understand.
Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 Server at dns.vingrad.ru Port 80


При попытке ответить.
---
Что такое common, это библиотека или программа? Используют ли проекты 1 и 2 эту библиотеку? Или это всего-лишь общие исходники для обоих проектов? Если это библиотека, что её хедеры не надо прописывать в .pro файле, только LIBS и INCLUDEPATH. Если же это просто общие исходники, то их надо вписывать в оба .pro файла этих двух проектов.
Третий .pro файл (общий) просто будет собирать все проекты в поддеректориях, если он нужен вообще.

Это сообщение отредактировал(а) SABROG - 3.2.2009, 13:05


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
null56
Дата 3.2.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



Отпишись плиз, когда будет возможность, а я пока вот так посижу
Код

INCLUDEPATH += . #../common/

HEADERS +=    ../common/SocketEvent.h \

# Input
SOURCES += main.cpp \
        ../common/SocketEvent.cpp \

PM MAIL   Вверх
SABROG
Дата 3.2.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Так еще можно

Код

COMMON_PATH = ../common
HEADERS += ${COMMON_PATH}/SocketEvent.h
SOURCES += main.cpp \
        ${COMMON_PATH}/SocketEvent.cpp


INCLUDEPATH передается компилятору, он там ищет хедеры, которые не являются твоей программой. Хедеры к бибилоеткам, системным, чужим...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
null56
Дата 3.2.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



common - это просто классы или обычные инклюды, которые может использовать, как проект 1, так и проект 2....
Хотя может и правда сделать из нее библиотеку из объектников, инклюдить заголовки, а для линковки использовать либу

Мне другое интересно, почему, указывая INCLUDEPATH, он не ищет инклюды в common?

Добавлено @ 13:29
или я туплю.....
Компилятор найдет их... это qmake ругается... правильно?

Спасибо, что - то затупил... почитаю лучше асистента

Это сообщение отредактировал(а) null56 - 3.2.2009, 13:30
PM MAIL   Вверх
SABROG
Дата 3.2.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(null56 @  3.2.2009,  13:23 Найти цитируемый пост)
Мне другое интересно, почему, указывая INCLUDEPATH, он не ищет инклюды в common? 


Это уже не qmake не ищет, а компилер. У него есть какой-то бзик насчет полных путей. Надо порыться в инете на эту тему.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.5435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.