crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
QCasper
  опции профиля:
сообщение 6.12.2009, 18:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Есть один проект - статическая библиотека. Есть второй проект - исполняемый модуль. Модуль линкуется с библиотекой. Нужно, чтобы при запуске сборки модуля автоматически выполнялась сборка всех библиотек, от которых он зависит. На уровне файлов проекта естественно. То есть без всяких левых скриптов (это читай вручную опять же).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.12.2009, 18:23
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Смотри QMAKE_EXTRA_TARGETS тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 6.12.2009, 18:38
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(Litkevich Yuriy @ 6.12.2009, 18:23) *
Смотри QMAKE_EXTRA_TARGETS тут


Там я смотрел, но у меня ничего не вышло. Буду очень принзнателен за готовый рабочий пример.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.12.2009, 18:46
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(QCasper @ 6.12.2009, 21:38) *
Буду очень принзнателен за готовый рабочий пример.
Ну на пустом месте больше чем в асистенте я вряд ли напишу, приведи пример, своих зависимостей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 6.12.2009, 20:46
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(Litkevich Yuriy @ 6.12.2009, 18:46) *
Ну на пустом месте больше чем в асистенте я вряд ли напишу, приведи пример, своих зависимостей.


Вот файл проекта приложения. Статическая библиотека - rsync.

!include( ../../../config.pri ) {
    error(Run configure before building)
}

TEMPLATE = app
TARGET = rsynctester
DESTDIR = $$BINDIR/tests/$$TARGET
OBJECTS_DIR = $$TMPDIR/tests/$$TARGET
MOC_DIR = $$TMPDIR/tests/$$TARGET
RCC_DIR = $$TMPDIR/tests/$$TARGET
LIBS += -L"$$LIBDIR" -lrsync
INCLUDEPATH += $$INCLUDEDIR
CONFIG += $$BUILD_CONFIGURATION
depends = rsync

QMAKE_EXTRA_TARGETS += rsync

exists(stable.h) {
    CONFIG += precompile_header
    PRECOMPILED_HEADER = stable.h
}

# Input
HEADERS += widget.h
SOURCES += main.cpp widget.cpp

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 14:09
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Неужели никто не сталкивался? Или все пересобирают, зависимое от статкилибы приложение, вручную при каждом изменении этой либы? Скиньте, пожайлуста, свой файл проекта, кому удалось таки автоматизировать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 7.12.2009, 14:39
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Я для gcc под Linux делал так:

unix:MYLIBSDIR = ../../lib/unix-x86

LIBS  += -L$$MYLIBSDIR

unix {
    PRE_TARGETDEPS += $$MYLIBSDIR/libVisualization.a \
                      $$MYLIBSDIR/libTransforms.a
}


Плохо, конечно, что все либы приходится руками прописывать, но зато работает :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.12.2009, 14:50
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Я в Qt Creator работаю. Он позволяет галочками отметить проекты, от которых зависит текущий. Они в свою очередь могут зависеть от других проектов и т.д.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 14:57
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Это, как я понял, работает следующим образом. Если изменился сам файл либы (не исходники) до при команде make для приложения, последнее будет пересобрано. Это решает половину задачи. Вторая половина подразумевает, что команда make для приложения инициирует также и сборку всех либ, от которых оно зависит.

Но, в любом случае, за это тоже спасибо :)

Цитата(Kagami @ 7.12.2009, 14:50) *
Я в Qt Creator работаю. Он позволяет галочками отметить проекты, от которых зависит текущий. Они в свою очередь могут зависеть от других проектов и т.д.


Попробуйте следующее. Измените статиклибу, от которой зависит приложение и нажмите кнопку запуска. В результате у Вас либа пересоберётся, а приложение нет. В итоге изменений в запущенном приложении Вы не увидите. По крайней мере у меня не получилось. Галочку поставил. Qt Creator 1.3.0.

Впрочем, вкупе с вариантом, предложенным frg10, работать должно. Что само по себе уже неплохо.
Теперь бы вариант, работающий без Qt Creator, было бы совсем здорово :)

Сообщение отредактировал QCasper - 7.12.2009, 15:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.12.2009, 15:06
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Цитата(QCasper @ 7.12.2009, 14:57) *
Попробуйте следующее. Измените статиклибу, от которой зависит приложение и нажмите кнопку запуска. В результате у Вас либа пересоберётся, а приложение нет. В итоге изменений в запущенном приложении Вы не увидите. По крайней мере у меня не получилось. Галочку поставил. Qt Creator 1.3.0.

Для этого можно воспользоваться пунктом меню "Пересобрать все" :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 15:09
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(Kagami @ 7.12.2009, 15:06) *
Для этого можно воспользоваться пунктом меню "Пересобрать все" :)


Ну это конечно вариант, когда "всё" пересобирается за пару секунд. Но вот по 10 минут после каждого изменения ждать мне почему-то не хочется :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 7.12.2009, 15:38
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(QCasper @ 7.12.2009, 14:57) *
Это, как я понял, работает следующим образом. Если изменился сам файл либы (не исходники) до при команде make для приложения, последнее будет пересобрано. Это решает половину задачи. Вторая половина подразумевает, что команда make для приложения инициирует также и сборку всех либ, от которых оно зависит.


У меня проект тоже состоит из нескольких либ и приложения. И собирается ровно так, как хочется: собираются сначала все либы, потом приложение. Если только одна либа изменилась, то пересобирается только она и приложение.
Структура проекта такая (названия подпроектов изменены):
source
    \lib1
    \lib2
    \mainapp


В каталоге source лежит главный проектный файл source.pro. Содержимое примерно такое:
TEMPLATE = subdirs

CONFIG += ordered

SUBDIRS = lib1 \
    lib2 \
    mainapp_bin

mainapp_bin.subdir = mainapp
mainapp_bin.depends = lib1 lib2


ordered говорит qmake-у чтобы проекты собирались именно в таком порядке.
mainapp_bin.depends = lib1 lib2 - говорит что главное приложение зависит от либ

Проекты либ не очень интересны, поэтому их не привожу.
А проект главного приложения вот такой (несущественные части пропущены):
TARGET = mainapp
TEMPLATE = app
...
SOURCES += main.cpp
...
unix:MYLIBSDIR = ../../lib/unix-x86

LIBS  += -L$$MYLIBSDIR

unix {
    PRE_TARGETDEPS += $$MYLIBSDIR/libVisualization.a \
                      $$MYLIBSDIR/libTransforms.a
}
....
LIBS += -lVisualization \
        -lTransforms
....


Если открыть проект в QtCreator, то откроются все подпроекты. Ну и из консоли все нормально собирается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 15:41
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


А, ну так вся фишка в "главном проектном файле". А если обойтись только проектом приложения и только проектом либ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 7.12.2009, 16:08
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(QCasper @ 7.12.2009, 15:41) *
А, ну так вся фишка в "главном проектном файле". А если обойтись только проектом приложения и только проектом либ?

ИМХО, никак не обойтись: как make должен узнать, что ваши либы и приложение вообще как-то связаны? Если несколько проектов связаны, то их нужно объединять. Это sln файлы в VisualStudio и subdirs проекты в Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 16:26
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(frg10 @ 7.12.2009, 16:08) *
ИМХО, никак не обойтись: как make должен узнать, что ваши либы и приложение вообще как-то связаны? Если несколько проектов связаны, то их нужно объединять. Это sln файлы в VisualStudio и subdirs проекты в Qt.


Ну почему нет. Ведь может же в файле проекта (.pro) приложения быть инструкция, которая, в свою очередь, запишет инструкцию в Makefile о том, что нужно пойти туда-то и там собрать.
Вообще говоря, до последнего момента я думал, что механизм, описанный здесь, это и реализует. Но, как выяснилось - нет. А что он реализует, я так и не понял. И, кстати, тоже хотел об этом спросить сведующих людей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 7.12.2009, 16:39
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(QCasper @ 7.12.2009, 16:26) *
Ну почему нет. Ведь может же в файле проекта (.pro) приложения быть инструкция, которая, в свою очередь, запишет инструкцию в Makefile о том, что нужно пойти туда-то и там собрать.

Вообще, subdirs проект это и делает. А по поводу "запишет инструкцию в Makefile" есть абзац о том, как добавлять в мэйкфайл свои таржеты: Customizing Makefile Output. Но только там все руками делать надо, а в случае subdirs qmake сам все сделает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 7.12.2009, 16:48
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

Спасибо сказали: 2 раз(а)




Репутация:   1  


Цитата(frg10 @ 7.12.2009, 16:39) *
А по поводу "запишет инструкцию в Makefile" есть абзац о том, как добавлять в мэйкфайл свои таржеты: Customizing Makefile Output.


Вот, Вы уже третий, кто меня туда посылает :) Но у меня никак не получается, на основе лежащей там информации, решить эту задачу. Поэтому я и стал просить готовые файлы проектов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.6.2025, 9:01