Официальный форум СВД Встраиваемые Системы
20 Апрель, 2024, 04:21:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание сложного проекта, подобного проекту BSP, в Momentics  (Прочитано 4116 раз)
paha1956
Интересующийся

Сообщений: 3


« : 29 Март, 2014, 22:02:17 »

Добрый день.

Подскажите, пожалуйста, как в Momentics создаётся сложный проект, похожий по структуре на проект BSP, где в отдельных папках содержатся исходники отдельных программ и при трансляции проекта из этих исходников получается несколько исполняемых файлов в одном определённом каталоге проекта.

Подозреваю, что тут нельзя обойтись без создания нескольких специальных Makefile, но вот принципы их построения и методы распределения среди файлов и каталогов проекта мне не совсем понятны, вернее, совсем не понятны. Может быть в Momentics существует какой-нибудь автоматизированный механизм создания такого рода проектов?

Поиск по Help Momentics дал лишь общее представление о создании и применении Makefile.

Спасибо.
Записан
Глеб Крылов
Сотрудник СВД ВС
Пользователь

Сообщений: 21



WWW
« Ответ #1 : 01 Апрель, 2014, 09:12:44 »

Здравствуйте,
Пожалуйста, уточните задачу которую вы решаете. Что касается создания «сложного» проекта с Makefile, не совсем понятно, какого конечного результата нужно достичь? Какого рода проблемы у Вас возникали при сборке исходников из существующего дерева каталогов? Под какое количество процессорных архитектур необходимо проводить сборку (возможно их несколько)?
Спасибо.
Записан

Сотрудник СВД Встраиваемые Системы
paha1956
Интересующийся

Сообщений: 3


« Ответ #2 : 01 Апрель, 2014, 10:32:58 »

Благодарю Вас, Глеб, за отклик на мой вопрос.
Проблема в следующем.

У меня вполне нормально получается создать и оттранслировать проект, где в корневом каталоге проекта находятся несколько исходных файлов, а один единственный исполняемый файл помещается в папку arm/o-le-v7. Я работаю только с одной платформой ARM v7.

Далее, я беру готовый проект BSP и вижу, что там внутри проекта есть много папок, содержащих исходники для драйверов различных устройств. Причём, при трансляции проекта за один раз (если выбрать Build Project для данного проекта BSP) из этих исходников получается сразу несколько исполняемых файлов, каждый из которых находится в своей папке, которая относится к конкретному драйверу (например i2c/arm/le.v7 или spi/arm/le.v7 и т.д.).

Мне нужно повторить тоже самое, т.е. что бы за одну трансляцию проекта можно было получить сразу несколько исполняемых файлов из только своих исходников, находящихся в соответствующем каталоге.
Как раз это у меня не получается.

Я просто не могу понять принцип настройки подобного рода проектов в Momentics. Т.е. как в Momentics осуществляется привязка тех или иных исходных файлов к тем исполняемым файлам, которые должны быть получены в результате трансляции. Причём таких, я бы сказал, "групп" в проекте должно быть несколько.

Говоря иначе, мне не создать корректное дерево каталогов и не настроить правила трансляции этого дерева. Не понятно где в меню Momentics находятся эти настройки. Если они есть, конечно.

Спасибо.
Записан
Глеб Крылов
Сотрудник СВД ВС
Пользователь

Сообщений: 21



WWW
« Ответ #3 : 01 Апрель, 2014, 19:24:16 »

Здравствуйте,
Судя по всему, решение Вашей задачи лежит в плоскости создания собственных Make-файлов. В документации присутствует раздел посвященный специфичному для QNX синтаксису make-файлов для разветвленного дерева каталогов. Также в данном разделе есть пример создания собственных make-файлов.

Готовы ответить на дополнительные вопросы, и помочь в случае возникновения сложностей при реализации проекта.
Записан

Сотрудник СВД Встраиваемые Системы
paha1956
Интересующийся

Сообщений: 3


« Ответ #4 : 02 Апрель, 2014, 10:26:47 »

Добрый день.

Ага, я подозревал это.

Спасибо за ссылку. Я находил подобного рода статьи в интернете и даже в help Momentics что-то похожее было. Но информации там крайне мало. Есть статьи на Faundry27 (http://community.qnx.com/sf/wiki/do/viewPage/projects.ide/wiki/ProjectsBuildAndIDE), но там тоже скорее информация общего плана. А по Вашей ссылке более подробно всё расписано. Буду вникать.

Главное это то, что я получил ещё одно подтверждение, что надо корректировать именно Make файлы в проекте и, скорее всего, делать это надо ручками.

А вот тут человек столкнулся с похожей проблемой: http://foundry27.com/sf/discussion/do/listPosts/projects.community/discussion.qnx_momentics_community_support.topc7589;jsessionid=A7638B2598FAAEF08D1236E616381B70.
Совсем недавно наткнулся на эту тему форума, не успел пока глубоко вникнуть.

Ещё раз спасибо. Если будут положительные результаты обязательно сообщу.

PS Немного информации о моём проекте. Сейчас я занимаюсь адаптацией BSP от Freescale i.MX6 Sabre Lite для платы PHYTEC phyFLEX-i.MX6. Есть положительные результаты. Далее в планах стоит разработка программного комплекса, по структуре похожего на BSP.
Записан
da-nie
Интересующийся

Сообщений: 7


« Ответ #5 : 06 Август, 2018, 10:13:44 »

Здравствуйте.
А не подскажете, как в IDE Momentics 2.2.0 создать проект, исходники которого раскиданы по разным папкам, но исполняемый файл получается один? Если в настройках компиляции указать пути к внешним папкам с *.cc и *.h файлами, то при компиляции в этих папках вызывается линкер и пытается собрать проект только на основе тех объектников, что получились после компиляции папки. Разумеется, такая сборка невозможна. Тогда как же размещать файлы проекта по разным папкам?
Спасибо.
« Последнее редактирование: 06 Август, 2018, 10:15:56 от da-nie » Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #6 : 06 Август, 2018, 10:30:43 »

Тогда как же размещать файлы проекта по разным папкам?

Посмотрите штатные Makefile-ы IDE в директории $(QNX_TARGET)/usr/include/mk на предмет EXTRA_OBJS и EXTRA_SRCVPATH.
Записан

da-nie
Интересующийся

Сообщений: 7


« Ответ #7 : 06 Август, 2018, 10:57:29 »

Спасибо. Но, честно говоря, я ваш совет не понял.  Huh?
EXTRA_OBJS и EXTRA_SRCVPATH встречаются в qmakros.mk и в qphabtarg.mk:

Из qmakros.mk
Код:
...
SRCVPATH+=$(EXTRA_SRCVPATH)
...
OBJS = $(filter-out $(EXCLUDE_OBJS), $(raw_objs)) $(EXTRA_OBJS)
...

Из qphabtarg.mk:
Код:
...
EXTRA_SRCVPATH += $(PROJECT_ROOT)/src
...

Собственно, вот всё, что я отыскал. А что с этим делать-то нужно (я не знаток структуры makefile  Huh? )?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #8 : 06 Август, 2018, 11:08:51 »

Спасибо. Но, честно говоря, я ваш совет не понял.  Huh?

С помощью этих конструкций можно добавить в Makefile проекта подключение отдельных объектных файлов, лежащих вне базовой директории, либо включение отдельных внешних директорий. Для этого, естественно, требуется базовое владение Makefile-ами, поскольку вся система сборки в IDE основана на них.
Записан

da-nie
Интересующийся

Сообщений: 7


« Ответ #9 : 06 Август, 2018, 11:13:28 »

Эх, жаль, что такое требует работы с низкого уровня. Ну ничего. Попробую разобраться.

Цитировать
подключение отдельных объектных файлов, лежащих вне базовой директории,

Вот это вот можно точно из настроек проекта в IDE сделать. Но это очень неудобно будет.

Цитировать
ибо включение отдельных внешних директорий.

А вот этого из настроек IDE сделать нельзя.

Я так понял, нужно найти в common.mk что-то типа OBJ= и вписать туда подобное OBJS = $(filter-out $(EXCLUDE_OBJS), $(raw_objs)) $(EXTRA_OBJS) ?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #10 : 06 Август, 2018, 11:17:26 »

Я так понял, нужно найти в common.mk что-то типа OBJ= и вписать туда подобное OBJS = $(filter-out $(EXCLUDE_OBJS), $(raw_objs)) $(EXTRA_OBJS) ?

В 2х словах нужно добавить путь к директории:
EXTRA_OBJS+=$(PROJECT_ROOT)/../???
Записан

da-nie
Интересующийся

Сообщений: 7


« Ответ #11 : 06 Август, 2018, 11:43:54 »

Попробую, спасибо.
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #12 : 06 Август, 2018, 16:40:50 »

В 2х словах нужно добавить путь к директории:
EXTRA_OBJS+=$(PROJECT_ROOT)/../???

Поправка:
EXTRA_SRCVPATH+=$(PROJECT_ROOT)/../???
Записан

da-nie
Интересующийся

Сообщений: 7


« Ответ #13 : 07 Август, 2018, 09:46:16 »

Спасибо.

EXTRA_SRCVPATH+=$(PROJECT_ROOT)/../??? сама IDE ставит, когда я указываю в настройках компилятора.
С EXTRA_OBJS+=$(PROJECT_ROOT)/x86/o/ не работает. Как я понял, ожидается не директория, а файлы. Если же я указываю объектные файлы, то выдаётся сообщение, что этого файла нет (он ведь ещё не компилировался).

Я подключаю папку src/UnitTests. Вот что сейчас в common.mk (я убрал EXTRA_OBJS+=...):

Код:
# This is an automatically generated record.
# The area between QNX Internal Start and QNX Internal End is controlled by
# the QNX IDE properties.


ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)

#===== USEFILE - the file containing the usage message for the application.
USEFILE=



#===== LIBS - a space-separated list of library items to be included in the link.
LIBS+=/usr/lib/libsocks.so
#===== DEFCOMPILER_TYPE - default compiler.
DEFCOMPILER_TYPE=gcc
#===== GCC_VERSION - use it when you want to specify compiler version other than default.
GCC_VERSION=2.95.3
#===== CCFLAGS - add the flags to the C compiler command line.
CCFLAGS+=-fhuge-objects
#===== EXTRA_INCVPATH - a space-separated list of directories to search for include files.
EXTRA_INCVPATH+=$(PROJECT_ROOT)/src/UnitTests
#===== EXTRA_SRCVPATH - a space-separated list of directories to search for source files.
EXTRA_SRCVPATH+=$(PROJECT_ROOT)/src/UnitTests
include $(MKFILES_ROOT)/qmacros.mk
#===== EXTRA_OBJS - object files and libraries contributed additionaly on link/archive step
EXTRA_OBJS+=/lib/libsocket.so
#QNX internal start
ifeq ($(filter g, $(VARIANT_LIST)),g)
DEBUG_SUFFIX=_g
LIB_SUFFIX=_g
else
DEBUG_SUFFIX=$(filter-out $(VARIANT_BUILD_TYPE) le be,$(VARIANT_LIST))
ifeq ($(DEBUG_SUFFIX),)
DEBUG_SUFFIX=_r
else
DEBUG_SUFFIX:=_$(DEBUG_SUFFIX)
endif
endif

EXPRESSION = $(firstword $(foreach a, $(1)_$(CPUDIR)$(DEBUG_SUFFIX)  $(1)$(DEBUG_SUFFIX) \
$(1)_$(CPUDIR) $(1), $(if $($(a)),$(a),)))
MERGE_EXPRESSION= $(foreach a, $(1)_$(CPUDIR)$(DEBUG_SUFFIX) $(1)$(DEBUG_SUFFIX) \
$(1)_$(CPUDIR) $(1), $($(a)))

GCC_VERSION:=$($(firstword $(foreach a, GCC_VERSION_$(CPUDIR) GCC_VERSION, \
$(if $($(a)), $(a), ))))

EXTRA_LIBVPATH := $(call MERGE_EXPRESSION, EXTRA_LIBVPATH)
EXTRA_INCVPATH := $(call MERGE_EXPRESSION, EXTRA_INCVPATH)
EXTRA_SRCVPATH := $(call MERGE_EXPRESSION, EXTRA_SRCVPATH)
EXTRA_OBJS := $($(call EXPRESSION,EXTRA_OBJS))

CCFLAGS_D = $(CCFLAGS$(DEBUG_SUFFIX)) $(CCFLAGS_$(CPUDIR)$(DEBUG_SUFFIX)) \
$(CCFLAGS_@$(basename $@)$(DEBUG_SUFFIX))   \
$(CCFLAGS_$(CPUDIR)_@$(basename $@)$(DEBUG_SUFFIX))
LDFLAGS_D = $(LDFLAGS$(DEBUG_SUFFIX)) $(LDFLAGS_$(CPUDIR)$(DEBUG_SUFFIX))

CCFLAGS += $(CCFLAGS_$(CPUDIR))  $(CCFLAGS_@$(basename $@))   \
   $(CCFLAGS_$(CPUDIR)_@$(basename $@))  $(CCFLAGS_D)
LDFLAGS += $(LDFLAGS_$(CPUDIR)) $(LDFLAGS_D)

LIBS:=$(foreach token, $($(call EXPRESSION,LIBS)),$(if $(findstring ^, $(token)), $(subst ^,,$(token))$(LIB_SUFFIX), $(token)))
libnames:= $(subst lib-Bdynamic.a, ,$(subst lib-Bstatic.a, , $(libnames)))
libopts := $(subst -l-B,-B, $(libopts))

BUILDNAME:=$($(call EXPRESSION,BUILDNAME))$(if $(suffix $(BUILDNAME)),,$(IMAGE_SUFF_$(BUILD_TYPE)))
BUILDNAME_SAR:= $(patsubst %$(IMAGE_SUFF_$(BUILD_TYPE)),%S.a,$(BUILDNAME))

POST_BUILD:=$($(call EXPRESSION,POST_BUILD))
#QNX internal end
include $(MKFILES_ROOT)/qphabtarg.mk


OPTIMIZE_TYPE=$(OPTIMIZE_TYPE_$(filter g, $(VARIANTS)))
OPTIMIZE_TYPE_g=none
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #14 : 07 Август, 2018, 10:30:45 »

Пример простейшего рабочего Makefile, собирающего бинарник из исходников в директориях $(PROJECT_ROOT)/ и $(PROJECT_ROOT)/../../nix/.

Цитировать
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)

USEFILE=

INSTALLDIR=/dev/null

define PINFO
PINFO DESCRIPTION=test
endef

EXTRA_SRCVPATH += $(PROJECT_ROOT)/../../nix

EXTRA_INCVPATH += $(PROJECT_ROOT)/../../private

include $(MKFILES_ROOT)/qtargets.mk
Записан

Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 09 Апрель, 2024, 22:02:45