Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Научите меня пользоваться GCC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sz36
Hi, All!

Поставил OpenAT (кто не знает - среда для разработки приложений для GSM модулей от Wavecom). И не могу собрать даже тестовые примеры. То есть, не могу разобраться, как это сделать, что запускать. Project Wizard создает каталог проекта, в котором наличествуют исходники на С, h и make файлы. Теперь это добро надо скомпилировать и собрать с помощью GCC (поставился в составе OpenAT). А как? В каталоге проекта создается файл LoadIde.bat, он запускает какой-то bash, в котором что-то нужно вводить в командной строке. Что это такое, и имеет ли оно какое-нибудь отношение к компиляции?
В каталоге GCC есть каталог BIN, и есть ARM-ELF\BIN, в каждом множество исполняемых файлов, что из этого нужно запускать для компиляции? И как, поскольку явным образом не запускается ни один exe'шник, все говорят что не найден какой-то cygwin1.dll. Я надеялся хоть они будут выдавать подсказку по командной строке... Есть man'ы, говорят, там документация. Но, опять же, чем их смотреть под Windows?
В документации про процесс компиляции не нашел ни слова, исключительно про инсталляцию и, собс-но, программирование.

Ни с Linux, ни с GCC никогда дела не имел, помогите, уже несколько дней бьюсь.
klen
1
....наличествуют исходники на С, h и make файлы.
2
.... файл LoadIde.bat, он запускает какой-то bash, в котором что-то нужно вводить в командной

3. вот в этом bash'э надо ввести команду "make -f makefile" , в ответ на эту команду утилита make.exe засосет файл makefile и будет выполнять его - тоесть команды компиляции с помощу GCC и сборку проекта. На выходе должно обычно получится файл с расширением elf, и файл в бинарном формате который зашивается в микросхему.

Пробуйте, не получится разжуем .
beer_warrior
Для начала - сюда http://gcc.gnu.org/onlinedocs/.

Цитата
он запускает какой-то bash, в котором что-то нужно вводить в командной строке. Что это такое, и имеет ли оно какое-нибудь отношение к компиляции?

bash - юниксовый прародитель комманд.кома, возможности у него побогаче будут, поэтому и используется. Если 1-2 файла то можно и из под Far.

Цитата
не запускается ни один exe'шник, все говорят что не найден какой-то cygwin1.dll.

Это уже серьезнее. Эта dll-ка отвечает на юниксовые вызовы gcc. Должна где-то в путях присутствовать. Возможно цепляется через LoadIde.bat

Цитата
3. вот в этом bash'э надо ввести команду "make -f makefile" , в ответ на эту команду утилита make.exe засосет файл makefile и будет выполнять его - тоесть команды компиляции с помощу GCC и сборку проекта.


Вот тут я камарада klenа немножко подкорректирую.

Команда make по умолчанию ищет файл makefile. А вот если имя другое тогда через ключик -f

makefile это скрипт компиляции, т.е. то что не хочеться вводить каждый раз в командной строке - имена файлов учаснегов, пути к компилятору и утилитам, все многочисленные ключи. Там своя система меток и макросов, но разобраться в ней несложно. По команде make он будет исполнятся.

Внимание важный момент. Борланд вставляет в свои продукты свой make, нихрена со стандартным не совместимый.И естесно прописывает его глобально. Обязательно изолировать борландовский make от gcc.

Доброй охоты smile.gif
klen
Цитата(beer_warrior @ Mar 25 2007, 01:21) *
Вот тут я камарада klenа немножко подкорректирую.


biggrin.gif я есть иметь makefile их бин полное путевое имя cheers.gif

Если ругаеся на отсутствие дллки - в вашем случае это значт что cygwin установился из пакета но при вызове утилит (тогоже make) просто они при загрузке не находят бибилу. Найдите там где усановился пакет OpenAT эти библы и пропишите их путь в путях системы.

Звоните пишите, будут деньги высылайте


2_beer_warrior
Охота уже скоро!! вчера на Люблино прожег трубы - тарелки довольны smile.gif
sz36
Спасибо, пошел пробовать :-)

[..и тут же задал новый вопрос..] А что значит такое предупреждение при запуске?
bash.exe: warning: could not create /tmp!

Где он хочет его создать? И что это - каталог? Создал в корне диска - не помогает. И еще - говорят, в Линуксе имена файлов регистро-зависимые. Для make-файла и параметров командной строки это правило тоже действует, если все под виндой происходит?
klen
Цитата(sz36 @ Mar 25 2007, 15:51) *
bash.exe: warning: could not create /tmp!
Где он хочет его создать?

Наверно в корне куда пакет встал, но могут быть глюки. Я их так решаю. Если что то кудато не лезет или не находит то что точно есть (например уменя это стабильный трах при сборке крайненедельного GCC куча глюков иззи неотлаженности конфигуровочных фалов ) то я программкой Filemon смотрю все файловые операции который с происходят, в логах то и написано КТО КУДА ЛОМИТСЯ ПИСАТЬ и ГДЕ КТО ЧТО ХОЧЕТ НАЙТИ И ПРОЧИТАТЬ. Осюда и пляшем - создаем нужные дериктории. переносим.. копируем... подкручиаем... и тд. Бывае так что при сборке утилита чето там делает и пытается писать в папку у которого атрибут только чтение - на выходе косяк ругонь и тд с остановом процесса сборки.
sz36
Цитата(klen @ Mar 25 2007, 00:55) *
3. вот в этом bash'э надо ввести команду "make -f makefile" , в ответ на эту команду утилита make.exe засосет файл makefile и будет выполнять его - тоесть команды компиляции с помощу GCC и сборку проекта.


Make запускается, спасибо. Но теперь оно говорит
make: *** No targets. Stop.

А это что значит?
beer_warrior
Цитата
make: *** No targets. Stop.

В мэйкфайле может быть несколько сценариев, отличающихся target-ом, т.е. целью компиляции.
Самые распостранненные all(побилдить все), clean(удалить результаты) install (понятно), program (прошивка).
Тарджеты в тексте выделены как ассемблерные метки - с начала строки и с двоеточием - найти легко.
Скорее всего мэйк будет выглядеть:
Код
make all
или
make -f custom_makefile all
klen
biggrin.gif
медленно, но движуха есть! ...к скомпиляному коду tongue.gif
sz36
Цитата(beer_warrior @ Mar 26 2007, 21:17) *
В мэйкфайле может быть несколько сценариев, отличающихся target-ом, т.е. целью компиляции.
Самые распостранненные all(побилдить все), clean(удалить результаты) install (понятно), program (прошивка).
Тарджеты в тексте выделены как ассемблерные метки - с начала строки и с двоеточием - найти легко.


Хм... Нет там никаких таргетов... Мне дико неудобно, но может взглянете на вложение? Этот make создан автоматически ProjectWizard'ом. Два сишных исходника, которые там указаны, тоже созданы. Каталоги с библиотеками и ОС тоже вроде бы есть. Как ему указать, что надо сделать прошивку?


Цитата(beer_warrior @ Mar 26 2007, 21:17) *
Скорее всего мэйк будет выглядеть:
Код
make -f custom_makefile all


На это оно говорит
make: *** No rule to make target `all'. Stop.


Не получается файлом вставить, вот содержимое
Код
#------------------------------------------------------------------------------
#   Include this file only one time
#------------------------------------------------------------------------------
ifndef MAKEFILE_INCLUDED
MAKEFILE_INCLUDED = YES

#------------------------------------------------------------------------------
#   Library module (lib) or Binary module (bin)
#------------------------------------------------------------------------------
PROCESS = bin

#------------------------------------------------------------------------------
#   Set the used Api for Open-AT : ADL or OAT (standard Open-AT API)
#------------------------------------------------------------------------------
API = ADL

#------------------------------------------------------------------------------
#   Set GCC Call Stack factor (to increase Call Stack size automatically for GCC compiler)
#------------------------------------------------------------------------------
GCC_STACK_SIZE_FACTOR = 3

#------------------------------------------------------------------------------
#   List of source files of the library or executable to generate
#------------------------------------------------------------------------------
SRC_C_LIST =  \
main.c \
portmanager.c \


#------------------------------------------------------------------------------
#   List of assembler files of the library or executable to generate
#------------------------------------------------------------------------------
SRC_ASM_LIST =  \


#------------------------------------------------------------------------------
#   List of objects real names to use for making binary file
#------------------------------------------------------------------------------
EXTERNAL_OBJ_LIST =  \

#------------------------------------------------------------------------------
#   List of objects prefixed names to use for making binary file
#------------------------------------------------------------------------------
PREFIXED_OBJ_LIST =  \


#------------------------------------------------------------------------------
#   List of libraries real names to use for making binary file
#------------------------------------------------------------------------------
EXTERNAL_LIB_LIST =  \


#------------------------------------------------------------------------------
#   List of libraries prefixed names to use for making binary file, inherited from OS
#------------------------------------------------------------------------------
PREFIXED_LIB_LIST = \
wmadl_4.10.5.2.0

#------------------------------------------------------------------------------
#   List of libraries prefixed names to use for making binary file
#------------------------------------------------------------------------------
PREFIXED_LIB_LIST +=  \
MultiApp \


#------------------------------------------------------------------------------
#   Plug-in used libraries list
#------------------------------------------------------------------------------
PREFIXED_LIB_LIST +=  \


#------------------------------------------------------------------------------
#   Compilation flags
#------------------------------------------------------------------------------
PP_OPT_COMMON =  \
__OAT_API_VERSION__=410 \


#------------------------------------------------------------------------------
#   Path for code C files
#------------------------------------------------------------------------------
PATH_C = \
../../src \


#------------------------------------------------------------------------------
#   Path for code ASM files
#------------------------------------------------------------------------------
PATH_ASM = $(PATH_C)

#------------------------------------------------------------------------------
#   Path for include C files
#------------------------------------------------------------------------------
PATH_H = \
../../inc \
../../../Libraries/MultiApp/itf \


#------------------------------------------------------------------------------
#   Path for include C files
#------------------------------------------------------------------------------
C_OPTIONS += \

SYSTEM_PATH_LIST = \



#------------------------------------------------------------------------------
#   Path for include C files, inherited from OS
#------------------------------------------------------------------------------
PATH_H += \
D:/TDATA/OpenAT/OS/4.10.10/ADL/basic \
D:/TDATA/OpenAT/OS/4.10.10/ADL/itf \


#------------------------------------------------------------------------------
#   Path for include C files, inherited from Plug-in Libraries
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
#   Path for include ASM files
#------------------------------------------------------------------------------
PATH_I = $(PATH_H)

#------------------------------------------------------------------------------
#   Absolute paths for Object files
#------------------------------------------------------------------------------
PATH_EXT_OBJ = \

#------------------------------------------------------------------------------
#   Root paths for Object files
#------------------------------------------------------------------------------
PATH_ROOT_OBJ = \


#------------------------------------------------------------------------------
#   Absolute paths for Library files, inherited from OS
#------------------------------------------------------------------------------
PATH_EXT_LIB = \
D:/TDATA/OpenAT/OS/4.10.10/ADL \

THEMAINOSLIB = \
D:/TDATA/OpenAT/OS/4.10.10/ADL/$(COMPILER_PREFIX)wmadl_4.10.5.2.0.lib


#------------------------------------------------------------------------------
#   Absolute paths for Plug-in Library files
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
#   Absolute paths for Library files
#------------------------------------------------------------------------------
PATH_EXT_LIB += \


#------------------------------------------------------------------------------
#   Root paths for Library files
#------------------------------------------------------------------------------
PATH_ROOT_LIB = \
../../../Libraries/MultiApp \


#------------------------------------------------------------------------------
#   Memory link addresses
#------------------------------------------------------------------------------
ROBASE = 0x00210000
RWBASE = 0x180C0000

endif
klen
Это все что есть в нем?
я тоже тргетов не вижу.

вижу только один выход - НАПИСАТЬ ИХ!
beer_warrior
Вброшу рабочий примерчег:
Код
#################################################################
## This Makefile Exported by MinGW Developer Studio
## Copyright (c) 2002-2004 by Parinya Thipchart
#################################################################

ifneq (,$(findstring Release, $(CFG)))
  override CFG = Release
else
  override CFG = Debug
endif

PROJECT = test2
CC = "C:\_tools\MinGW\bin\g++.exe"

ifeq ($(CFG),Debug)
  OBJ_DIR = Debug
  OUTPUT_DIR = Debug
  TARGET = test2.exe
  C_INCLUDE_DIRS =
  C_PREPROC = -DHAVE_W32API_H -D__WXMSW__ -D__WXDEBUG__
  CFLAGS = -pipe -Wno-ctor-dtor-privacy -Wall -g2 -O0 -fno-rtti -fno-exceptions
  RC_INCLUDE_DIRS =
  RC_PREPROC = --define __WXMSW__ --define __WXDEBUG__
  RCFLAGS =
  LIB_DIRS =
  LIBS = -lwxmsw25d_core -lwxbase25d -lwxtiffd -lwxjpegd -lwxpngd -lwxzlibd -lwxregexd -lwxexpatd -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
  LDFLAGS = -pipe -mthreads, -Wl,--subsystem,windows -mwindows
endif

ifeq ($(CFG),Release)
  OBJ_DIR = Release
  OUTPUT_DIR = Release
  TARGET = test2.exe
  C_INCLUDE_DIRS =
  C_PREPROC = -DHAVE_W32API_H -D__WXMSW__
  CFLAGS = -pipe -Wno-ctor-dtor-privacy -Wall -g0 -O2 -fno-rtti -fno-exceptions
  RC_INCLUDE_DIRS =
  RC_PREPROC = --define __WXMSW__
  RCFLAGS =
  LIB_DIRS =
  LIBS = -lwxmsw25_core -lwxbase25 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
  LDFLAGS = -pipe -s -mthreads, -Wl,--subsystem,windows -mwindows
endif

ifeq ($(OS),Windows_NT)
  NULL =
else
  NULL = nul
endif

SRC_OBJS = \
  $(OBJ_DIR)/app.o    \
  $(OBJ_DIR)/main.o

define build_target
@echo Linking...
@$(CC) -o "$(OUTPUT_DIR)\$(TARGET)" $(SRC_OBJS) $(LIB_DIRS) $(LIBS) $(LDFLAGS)
endef

define compile_source
@echo Compiling $<
@$(CC) $(CFLAGS) $(C_PREPROC) $(C_INCLUDE_DIRS) -c "$<" -o "$@"
endef

.PHONY: print_header directories

$(TARGET): print_header directories $(SRC_OBJS)
    $(build_target)

.PHONY: clean cleanall

cleanall:
    @echo Deleting intermediate files for 'test2 - $(CFG)'
    -@del $(OBJ_DIR)\*.o
    -@del "$(OUTPUT_DIR)\$(TARGET)"
    -@rmdir "$(OUTPUT_DIR)"

clean:
    @echo Deleting intermediate files for 'test2 - $(CFG)'
    -@del $(OBJ_DIR)\*.o

print_header:
    @echo ----------Configuration: test2 - $(CFG)----------

directories:
    -@if not exist "$(OUTPUT_DIR)\$(NULL)" mkdir "$(OUTPUT_DIR)"
    -@if not exist "$(OBJ_DIR)\$(NULL)" mkdir "$(OBJ_DIR)"

$(OBJ_DIR)/app.o: ../TEST_SOFT/app.cpp    \
../TEST_SOFT/app.h    \
../TEST_SOFT/main.h
    $(compile_source)

$(OBJ_DIR)/main.o: ../TEST_SOFT/main.cpp    \
../TEST_SOFT/main.h    \
../TEST_SOFT/app.h
    $(compile_source)
sz36
Цитата(beer_warrior @ Mar 27 2007, 00:33) *
Вброшу рабочий примерчег:


Спасибо! [..с тоской..] Пошел изучать формат make-файла... Интуитивно вроде бы понятно, но если ткнете носом, где есть оное описание в доступной для тупых форме, то мои границы не будут иметь благодарности :-)
beer_warrior
http://www.gnu.org/software/make/manual/html_node/index.html

Кстати можно попробовать взять вот это:
http://www.parinyasoft.com/download.html
Нормальная ИДЕ и генерит нормальные мэйки, может и сгодится.
imatveev13
Цитата(klen @ Mar 27 2007, 01:13) *
biggrin.gif
медленно, но движуха есть! ...к скомпиляному коду tongue.gif

OpenAT мейкфайлы кушает вейкомавскйи wmmake,
ужасное убожище по сравнению с нормальным мейком
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.