Часто бывает, что есть некоторый набор исходных файлов, но нет ни Makefile, ни Configure, так необходимых для сборки. Конечно true луниксоиды скажут, что Мэйкфайл нужно писать самим, но у меня не так много времени, поэтому предлагаю воспользоваться такой вот удобной утилиткой. Для начала, скажу что этот способ тестировался на том тулчейне, установка которого описана в первом посте, на другие тулчейны знающим людям поставить tmake думаю не составит проблем. 1. Для начала качаем следующий архив: Скачать 2. Далее в лине переходим в ту папку, где установлен тулчейн. У меня эта папка: /opt/toolchains/motomagx/arm-eabi2 в эту папку кидаем папку tmakelib из скачанного архива (В корень тулчейна) 3. Два скрипта, написанных на perl кидаем в папку bin (/opt/toolchains/motomagx/arm-eabi2/bin) 4. Ну и в скрипте запуска тулчейна (Тот скрипт, которым устанавливаете окружение. Если следовали пунктам из первого поста, то он у вас в /home/z6 , называется setenv-z6.sh) добавляем строку, можно в конец скрипта: Code export TMAKEPATH=$TOOLPREFIX/tmakelib/pwd/arm-linux-g++/ 5. Всё, Tmake установлен! Проверяем: 5.1. Запускаем тулчейн Code cd /home/z6 . setenv-z6.sh 5.2. Переходим в папку с исходными файлами: Code cd /папка_с_вашими_исходниками/ 5.3. В папке выполняем следующие команды (Должны пройти без ошибок, обратите внимание на пути): Code progen -o 1.pro chmod +x /opt/toolchains/motomagx/arm-eabi2/bin/progen chmod +x /opt/toolchains/motomagx/arm-eabi2/bin/tmake progen -o 1.pro tmake 1.pro -o Makefile 6. Должен создаться дефолтный Makefile, который нужно немножко поправить Дефолтный Makefile приблизительно такой: Code ############################################################################# <br> # Makefile for building 1 <br> # Generated by tmake at 20:26, 2010/09/16 <br> # Project: 1 <br> # Template: app <br> #############################################################################
####### Compiler, tools and options
CC = arm-linux-gnueabi-gcc <br> CXX = arm-linux-gnueabi-g++ <br> CFLAGS = -pipe -Wall -W -O3 -DNO_DEBUG <br> CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O3 -DNO_DEBUG <br> INCPATH = -I$(QTDIR)/include <br> LINK = arm-linux-gnueabi-gcc <br> LFLAGS = -Wl,-rpath,$(QTDIR)/lib <br> LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lm -lqte-mt -lezxappbase -lezxam <br> MOC = $(QTDIR)/bin/moc <br> UIC = $(QTDIR)/bin/uic
TAR = tar -cf <br> GZIP = gzip -9f
####### Files
HEADERS = <br> SOURCES = main.c <br> OBJECTS = main.o <br> INTERFACES = <br> UICDECLS = <br> UICIMPLS = <br> SRCMOC = <br> OBJMOC = <br> DIST = <br> TARGET = 1 <br> INTERFACE_DECL_PATH = .
####### Implicit rules
.SUFFIXES: .cpp .cxx .cc .C .c
.cpp.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.C.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o: <br> $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
all: $(TARGET)
$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) <br> $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
moc: $(SRCMOC)
tmake: Makefile
Makefile: 1.pro <br> tmake 1.pro -o Makefile
dist: <br> $(TAR) 1.tar 1.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) <br> $(GZIP) 1.tar
clean: <br> -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) <br> -rm -f *~ core
####### Sub-libraries
###### Combined headers
####### Compile
main.o: main.c <br> 6.1. Если вы хотите собрать SDL приложение: Правим верхнюю часть таким образом (Можно просто заменить часть Мэйкфайла (До строки #######Files) следующим) - Code ############################################################################# # Makefile for building You Name Project # Generated by tmake at 07:49, 2010/07/25 # Project: You Name Project # Template: app #############################################################################
####### Compiler, tools and options
CC = arm-linux-gnueabi-gcc CXX = arm-linux-gnueabi-g++ CFLAGS = `sdl-config --cflags` -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os CXXFLAGS= `sdl-config --cflags` -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os INCPATH = `sdl-config --cflags` LINK = arm-linux-gnueabi-gcc LFLAGS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer -lfreetype -lSDL_image -lSDL_gfx LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer -lfreetype -lSDL_image -lSDL_gfx MOC = $(QTDIR)/bin/moc UIC = $(QTDIR)/bin/uic
TAR = tar -cf GZIP = gzip -9f Обращаем внимание на CFLAGS, CXXFLAGS какие флаги туда поставить для корректной сборки, можно посмотреть в самих исходниках. Например -DGP2X -DDINGOO идр. для определённой платформы/параметров итд. -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os - это оптимизация под наш процессор (ARM11) Спасибо за нахождение параметров Ant-On'у и XVilka -O3 или -O2 также оптимизация, но бывает что программа/игра терминируется после неё( Мне сказали, что это как-то связано с похаканным компилятором)) 6.2. Если вы хотите собрать QT приложение: Обрезаем наш дефолтный MakeFile до строчки ###########Files Ну и вставляем следующую конструкцию. Спасибо Ant-On'у за неё. Code # App can compile for platform:
# PLATFORM=EZX-Z6
# PLATFORM=EZX-Z6W
# PLATFORM=EZX-U9
# PLATFORM=EZX-ZN5
# PLATFORM=EZX-V8
# PLATFORM=EZX-E8 (default)
# PLATFORM=EZX-VE66
# PLATFORM=EZX-EM35
#.
# For example - compile this source for Motorla ZN5:
#.
# cd /PROJECT_FOLDER/
# make clean
# make PLATFORM=EZX-ZN5
#.
######Config######
APPNAME := You_name_project
UPLOAD_PATH := /mmc/mmca1/bin/
##################
TOOLPREFIX := /opt/toolchains/motomagx/arm-eabi
ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib
ifeq ($(PLATFORM),)
PLATFORM = EZX-ZN5 <br> endif
ifeq ($(PLATFORM),EZX-Z6)
QTDIR := $(TOOLPREFIX)/lib/qt-2.3.8
EZXDIR := $(TOOLPREFIX)/lib/ezx-z6
LINKLIB := -lm -lqte-mt -lezxpm -ljpeg -lezxappbase -lezxtapi-xscale-r -llog_util -llighting
DIRECTIV := -DEZX_Z6
TARGET = $(APPNAME)_Z6
endif
ifeq ($(PLATFORM),EZX-V8)
QTDIR := $(TOOLPREFIX)/lib/qt-v8
EZXDIR := $(TOOLPREFIX)/lib/ezx-v8
LINKLIB := -lm -lqte-mt -lezxpm -lezxappbase
DIRECTIV := -DEZX_V8
TARGET = $(APPNAME)_V8
ZNEWCHECKBOX = 1
endif
ifeq ($(PLATFORM),EZX-E8)
ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8
QTDIR := $(TOOLPREFIX)/lib/qt-e8
EZXDIR := $(TOOLPREFIX)/lib/ezx-e8
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_E8
TARGET = $(APPNAME)_E8
endif
ifeq ($(PLATFORM),EZX-EM30)
ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8
QTDIR := $(TOOLPREFIX)/lib/qt-em30
EZXDIR := $(TOOLPREFIX)/lib/ezx-em30
EZXDIR2 := $(TOOLPREFIX)/lib/ezx-e8
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_EM30
TARGET = $(APPNAME)_EM30
endif
ifeq ($(PLATFORM),EZX-U9)
QTDIR := $(TOOLPREFIX)/lib/qt-zn5
EZXDIR := $(TOOLPREFIX)/lib/ezx-u9
EZXDIR2 := $(TOOLPREFIX)/lib/ezx-zn5
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_U9
TARGET = $(APPNAME)_U9
endif
ifeq ($(PLATFORM),EZX-Z6W)
QTDIR := $(TOOLPREFIX)/lib/qt-z6w
EZXDIR := $(TOOLPREFIX)/lib/ezx-z6w
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_Z6W
TARGET = $(APPNAME)_Z6W
endif
ifeq ($(PLATFORM),EZX-ZN5)
QTDIR := $(TOOLPREFIX)/lib/qt-zn5
EZXDIR := $(TOOLPREFIX)/lib/ezx-zn5
LINKLIB := -lm -lqte-mt -lezxappbase -lezxqtnapi -lezxtapi-xscale-r
DIRECTIV := -DEZX_ZN5
TARGET = $(APPNAME)_ZN5
endif
ifeq ($(PLATFORM),EZX-EM35)
ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8
QTDIR := $(TOOLPREFIX)/lib/qt-em35
EZXDIR := $(TOOLPREFIX)/lib/ezx-em35
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_EM35
TARGET = $(APPNAME)_EM35
endif
ifeq ($(PLATFORM),EZX-VE66)
ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8
QTDIR := $(TOOLPREFIX)/lib/qt-em35
EZXDIR := $(TOOLPREFIX)/lib/ezx-ve66
LINKLIB := -lm -lqte-mt -lezxappbase
DIRECTIV := -DEZX_VE66
TARGET = $(APPNAME)_VE66
endif
CC = $(TOOLPREFIX)/bin/arm-linux-gnueabi-gcc
CXX = $(TOOLPREFIX)/bin/arm-linux-gnueabi-g++
LD = $(TOOLPREFIX)/bin/arm-linux-gnueabi-g++
STRIP = $(TOOLPREFIX)/bin/arm-linux-strip
CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG $(INCPATH)
CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG $(DIRECTIV) $(INCPATH)
INCPATH = -I$(QTDIR)/include -I$(EZXDIR)/include -I$(EZXDIR2)/include -I $(TOOLPREFIX)/arm-linux-gnueabi/include
LDFLAGS = -s
LINK = $(TOOLPREFIX)/bin/arm-linux-gnueabi-gcc
LFLAGS = -Wl,-rpath-link,$(EZXDIR)/lib
LIBS = $(SUBLIBS) -L$(EZXDIR)/lib -L$(EZXDIR2)/lib -L$(ARMLIB) -L$(QTDIR)/lib $(LINKLIB)
MOC = $(QTDIR)/bin/moc
UIC = $(QTDIR)/bin/uic Правим переменную, обычно это: Code TOOLPREFIX := /opt/toolchains/motomagx/arm-eabi Ну и редактируем блок EZX-ZN5 7. Собственно всё. Спасибо большое Neomoto, за то, что напомнил :grin: ![](/Site/Pictures/14.png)
|