Qt cross compile x86_64 -> arm (RPi)

Fórumok

Üdv!

RPi/arm-ra hogyan fordítotok pl. Qt alkalmazást? A cross compile lenne talán a legjobb módszer.
Használtok ilyen megoldást? Pl.: http://hertaville.com/2014/04/12/cross-compiling-qt4-app/
Lényegében:
* RPi-n (Raspbian) install: "apt-get install libqt4-dev"
* PC-n install: arm cross compile toolchain (arm-linux-gnueabihf-gcc -v).
* PC-n install sshfs, moc-qt4: "apt-get install libqt4-dev-bin" (moc-qt4 -v)
* mount RPi rootfs PC-re: "sshfs pi @ 192.168.0.104:/ /home/user/rpi/mntrpi/ -o transform_symlinks -o allow_other"
* softlinkek PC-n:
"sudo ln -s $HOME/rpi/mntrpi/usr/lib/arm-linux-gnueabihf/ /usr/lib/arm-linux-gnueabihf"
"sudo ln -s $HOME/rpi/mntrpi/lib/arm-linux-gnueabihf/ /lib/arm-linux-gnueabihf"
...

Jelenleg a qemu-ban fordítom az arm binárist a make paranccsal. De végülis működik... :)

Szóval a fenti megoldást használjátok?

Hozzászólások

Én egyszer icecc-vel játszottam hasonlót. Annyiból más az általad írttól, hogy a raspi-n futó fordítás cross-toolchain-nel x86-os pécéket fogott be.
A raspi egy kicsit karcsú volt ahhoz, hogy sok gépet etessen elég feladattal, de a raspi2 már elég erős lehet, hogy még több pécés erőforrás be tudjon neki segíteni.
Ahogy néztem a raspi2-en futó raspbian is armv6 targetre van konfigola, csak sokkal gyorsabban csinálja :)

Kicsit elavult és nem is feltétlen tökéletes írás róla:
http://logout.hu/cikk/a_raspberry_pi_talalkozik_a_felhovel/bevezeto.html

Az akkori linux kernel
RasPi magában: 6 óra
RasPi + mindent bele: 3 óra

Tvheadend
RasPi egymaga: 380 másodperc
RasPi + T7100 noti: 90 másodperc
RasPi + mindent bele: 50 másodperc

Persze tudom, hogy valsz gyorsabb az egészet chroot-ban csinálni egy pécén, de ott is érdemes használni icecc vagy distcc-t cross-toolchainnel.

Most szuroprobaszeruen kiprobaltam ezalapjan ezt, es mukodik: egy hello world pl tokeletesen jol lefordul ;)


~/progs/test/rpi-cross$ cat hello.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 printf("Hello, world!\n");
 return(0);
}
~/progs/test/rpi-cross$ arch
x86_64
~/progs/test/rpi-cross$ arm-none-linux-gnueabi-gcc -Wall -pedantic -ansi -O3 -o hello hello.c
~/progs/test/rpi-cross$ scp -r -p ./hello 10.10.137.193:.

illetve:


@raspberrypi ~ $ ./hello 
Hello, world!
@raspberrypi ~ $ 

Namost jo kerdes, hogy hogyan lehet ezt szofisztikalni, hogyha ma'r a pi-n levo" libekkel/headerekkel parhuzamosan fejlesztenel...
Mindenesetre barhogyis, ha lenne sok idom, ugy probalnam ki hogy valami x11/qt-nal azert lightosabb lib es/vagy libet felhasznalo cucc forditasaval kezdenem. Pl egy libcurl-t vagy libuuid-et is meghivo egyszeru peldaprogramocskaval.

C fordítás Odroid-C1 <---> i5-3337U procis laptop + SSD

Amit fordítottam: fftw-3.3.4 http://www.fftw.org/download.html és "make -j6" paranccsal 4.9.2-es GCC-vel, x86-on ARM-ra fordító gcc-vel.

Eredmény: laptop i5-3337U procija 4,3-szor gyorsabban fordította az Odroid-C1-nél. Idők: 31,8 másodperc <---> 136 másodperc.

Becsült érték: Raspberry2-nél kb. 5,5-szer gyorsabb a laptop. Ergó amit laptopon 2 óra alatt lefordítasz, az Raspberry2 esetén az is 11 óra alatt kész, tehát este elindítva reggelre Raspberry2-n is kész.

Becsült érték Odroid-XU3 esetére: 1,45-szörös idő kell XU3-on a fordításhoz az ismertetett laptophoz képest.

UHS-es SD kártya a háttértára.

Ha minden jól megy, ma kapom meg az Odroid-U3 -at, abba már eMMC-t rendeltem.
Arra számítok, hogy az Odroid-C1 -hez képest nagyjából 1,8-szoros tempót fog adni az U3.
Sajnos már hűtőbordás ez, ezért a C1 jobban a szívemhez nőtt (az Rpi2-jellegű, borda nélküli).

Nem RPi-re, hanem másik ARM-ra (de a lényeg tökugyanaz) a Qt5/QML alkalmazásunkat (STB FW + GUI) így fejlesztjük:
- készítünk egy cross toolchaint (vagy ha már van, akkor azt használjuk);
- van egy komplett, egyedi build rendszerünk, ami az egész projectet lefordítja PC-re, ARM-ra, függőségekkel (pl. Qt5) együtt;
- keresztfordítjuk az Qt-s alkalmazásunkat és egyéb forrásainkat ARM-ra (ezek fordulnak PC-re is, így sok esetben az olyan fejlesztéseket, amik nem kifejezetten HW-specifikusak, PC-n is el lehet végezni);
- kiírjuk SD-re/felprogramozzuk az ARM eszközt, de a legkényelmesebb fejlesztéshez, ha NFS-en "juttatjuk be" a frissen fordított dolgokat;
- PC-n vagy ARM-on (pl. a már említett NFS-sel) teszteljük;

Olyat, hogy az ARM fordítsa le magának a kódokat, nem csinálunk; poénos lehet _egyszer_, de nincs nekünk ilyenre időnk (simán lehet 2-10x különbség a PC-s keresztfordítás javára).

Van egy cross compile qttest app.
Kihasználtam, hogy a hosztgépen van a buildroot/output/target RPi rendszer.
~# cat Makefile
# ---------------------------------------------------------------
CXX=/home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++

INCLUDEDIR = ./
INCLUDEDIR += /usr/include/Qt/
INCLUDEDIR += /usr/include/QtGui
INCLUDEDIR += /usr/include/QtCore

LIBRARYDIR = /home/admin/buildroot-2015.02/output/target/usr/lib
LIBRARY += QtCore QtGui
XLINK_LIBDIR += /home/admin/buildroot-2015.02/output/target/usr/lib
XLINK_LIBDIR += /home/admin/buildroot-2015.02/output/target/lib

INCDIR = $(patsubst %,-I%,$(INCLUDEDIR))
LIBDIR = $(patsubst %,-L%,$(LIBRARYDIR))
LIB = $(patsubst %,-l%,$(LIBRARY))
XLINKDIR = $(patsubst %,-Xlinker -rpath-link=%,$(XLINK_LIBDIR))

OPT = -O0
DEBUG = -g
WARN= -Wall
PTHREAD= -pthread

CXXFLAGS= $(OPT) $(DEBUG) $(WARN) $(INCDIR)
LDFLAGS= $(LIBDIR) $(LIB) $(XLINKDIR) $(PTHREAD)

INC = qttest.h
SRC = main.cpp qttest.cpp

OBJ = $(SRC:.cpp=.o) $(INC:.h=.moc.o)

TARGET_BIN = qttest.bin

all: $(OBJ)
$(CXX) $(LDFLAGS) $(OBJ) -o $(TARGET_BIN)

%.moc.cpp: $(INC)
moc-qt4 $< -o $@

%.o:%.cpp
$(CXX) $(CXXFLAGS) -c $<

clean:
-rm *.o
-rm $(TARGET_BIN)
# ---------------------------------------------------------------

Ezt hogyan lehet a QtCreator-ban beállítani? Egy "GCC" fordító, egy "Qt Version" és egy "Kit" kellene a Tools/Options-ban?

Manuálisan sikerült beállítani egy Makefile-t, amivel arm buildroot-ra fordult a demo qt app. Egy sima form volt rajta, meg egy button.
Az eredeti Makefile (x64):

~# cat Makefile
############################################################################# Makefile x64

####### Compiler, tools and options

CC = gcc
CXX = g++
DEFINES = -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -Ibuild -Ibuild
LINK = g++
LFLAGS = -m64
LIBS = $(SUBLIBS) -L/usr/lib64 -lQtGui -lQtCore -lpthread
AR = ar cqs
RANLIB =
QMAKE = /usr/bin/qmake-qt4
TAR = tar -cf
COMPRESS = gzip -9f
COPY = cp -f
SED = sed
COPY_FILE = $(COPY)
COPY_DIR = $(COPY) -r
STRIP =
INSTALL_FILE = install -m 644 -p
INSTALL_DIR = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p

####### Output directory

OBJECTS_DIR = build/

####### Files

SOURCES = main.cpp \
mainwindow.cpp build/moc_mainwindow.cpp
OBJECTS = build/main.o \
build/mainwindow.o \
build/moc_mainwindow.o
DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
/usr/lib64/qt4/mkspecs/common/linux.conf \
/usr/lib64/qt4/mkspecs/common/gcc-base.conf \
/usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
/usr/lib64/qt4/mkspecs/common/g++-base.conf \
/usr/lib64/qt4/mkspecs/common/g++-unix.conf \
/usr/lib64/qt4/mkspecs/qconfig.pri \
/usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
/usr/lib64/qt4/mkspecs/features/qt_functions.prf \
/usr/lib64/qt4/mkspecs/features/qt_config.prf \
/usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
/usr/lib64/qt4/mkspecs/features/default_pre.prf \
/usr/lib64/qt4/mkspecs/features/debug.prf \
/usr/lib64/qt4/mkspecs/features/default_post.prf \
/usr/lib64/qt4/mkspecs/features/shared.prf \
/usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
/usr/lib64/qt4/mkspecs/features/warn_on.prf \
/usr/lib64/qt4/mkspecs/features/qt.prf \
/usr/lib64/qt4/mkspecs/features/unix/thread.prf \
/usr/lib64/qt4/mkspecs/features/moc.prf \
/usr/lib64/qt4/mkspecs/features/resources.prf \
/usr/lib64/qt4/mkspecs/features/uic.prf \
/usr/lib64/qt4/mkspecs/features/yacc.prf \
/usr/lib64/qt4/mkspecs/features/lex.prf \
qtdemo.pro
QMAKE_TARGET = qtdemo
DESTDIR = bin/
TARGET = bin/qtdemo

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET): build/ui_mainwindow.h $(OBJECTS)
@$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
{ test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9][^0-9]*\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true

Makefile: qtdemo.pro /usr/lib64/qt4/mkspecs/linux-g++-64/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
/usr/lib64/qt4/mkspecs/common/linux.conf \
/usr/lib64/qt4/mkspecs/common/gcc-base.conf \
/usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
/usr/lib64/qt4/mkspecs/common/g++-base.conf \
/usr/lib64/qt4/mkspecs/common/g++-unix.conf \
/usr/lib64/qt4/mkspecs/qconfig.pri \
/usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
/usr/lib64/qt4/mkspecs/features/qt_functions.prf \
/usr/lib64/qt4/mkspecs/features/qt_config.prf \
/usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
/usr/lib64/qt4/mkspecs/features/default_pre.prf \
/usr/lib64/qt4/mkspecs/features/debug.prf \
/usr/lib64/qt4/mkspecs/features/default_post.prf \
/usr/lib64/qt4/mkspecs/features/shared.prf \
/usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
/usr/lib64/qt4/mkspecs/features/warn_on.prf \
/usr/lib64/qt4/mkspecs/features/qt.prf \
/usr/lib64/qt4/mkspecs/features/unix/thread.prf \
/usr/lib64/qt4/mkspecs/features/moc.prf \
/usr/lib64/qt4/mkspecs/features/resources.prf \
/usr/lib64/qt4/mkspecs/features/uic.prf \
/usr/lib64/qt4/mkspecs/features/yacc.prf \
/usr/lib64/qt4/mkspecs/features/lex.prf \
/usr/lib64/libQtGui.prl \
/usr/lib64/libQtCore.prl
$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++-64 CONFIG+=debug -o Makefile qtdemo.pro
/usr/lib64/qt4/mkspecs/common/unix.conf:
/usr/lib64/qt4/mkspecs/common/linux.conf:
/usr/lib64/qt4/mkspecs/common/gcc-base.conf:
/usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
/usr/lib64/qt4/mkspecs/common/g++-base.conf:
/usr/lib64/qt4/mkspecs/common/g++-unix.conf:
/usr/lib64/qt4/mkspecs/qconfig.pri:
/usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
/usr/lib64/qt4/mkspecs/features/qt_functions.prf:
/usr/lib64/qt4/mkspecs/features/qt_config.prf:
/usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
/usr/lib64/qt4/mkspecs/features/default_pre.prf:
/usr/lib64/qt4/mkspecs/features/debug.prf:
/usr/lib64/qt4/mkspecs/features/default_post.prf:
/usr/lib64/qt4/mkspecs/features/shared.prf:
/usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
/usr/lib64/qt4/mkspecs/features/warn_on.prf:
/usr/lib64/qt4/mkspecs/features/qt.prf:
/usr/lib64/qt4/mkspecs/features/unix/thread.prf:
/usr/lib64/qt4/mkspecs/features/moc.prf:
/usr/lib64/qt4/mkspecs/features/resources.prf:
/usr/lib64/qt4/mkspecs/features/uic.prf:
/usr/lib64/qt4/mkspecs/features/yacc.prf:
/usr/lib64/qt4/mkspecs/features/lex.prf:
/usr/lib64/libQtGui.prl:
/usr/lib64/libQtCore.prl:
qmake: FORCE
@$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++-64 CONFIG+=debug -o Makefile qtdemo.pro

dist:
@$(CHK_DIR_EXISTS) build/qtdemo1.0.0 || $(MKDIR) build/qtdemo1.0.0
$(COPY_FILE) --parents $(SOURCES) $(DIST) build/qtdemo1.0.0/ && $(COPY_FILE) --parents mainwindow.h build/qtdemo1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp build/qtdemo1.0.0/ && $(COPY_FILE) --parents mainwindow.ui build/qtdemo1.0.0/ && (cd `dirname build/qtdemo1.0.0` && $(TAR) qtdemo1.0.0.tar qtdemo1.0.0 && $(COMPRESS) qtdemo1.0.0.tar) && $(MOVE) `dirname build/qtdemo1.0.0`/qtdemo1.0.0.tar.gz . && $(DEL_FILE) -r build/qtdemo1.0.0

clean:compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core

####### Sub-libraries

distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile

check: first

mocclean: compiler_moc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_source_make_all

compiler_moc_header_make_all: build/moc_mainwindow.cpp
compiler_moc_header_clean:
-$(DEL_FILE) build/moc_mainwindow.cpp
build/moc_mainwindow.cpp: mainwindow.h
/usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o build/moc_mainwindow.cpp

compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: build/qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) build/qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all: build/ui_mainwindow.h
compiler_uic_clean:
-$(DEL_FILE) build/ui_mainwindow.h
build/ui_mainwindow.h: mainwindow.ui
/usr/lib64/qt4/bin/uic mainwindow.ui -o build/ui_mainwindow.h

compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean compiler_uic_clean

####### Compile

build/main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/main.o main.cpp

build/mainwindow.o: mainwindow.cpp mainwindow.h \
build/ui_mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/mainwindow.o mainwindow.cpp

build/moc_mainwindow.o: build/moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/moc_mainwindow.o build/moc_mainwindow.cpp

####### Install

install: FORCE

uninstall: FORCE

FORCE:

############################################################################# Makefile x64

Majd a módosított Makefile, amivel a 'make' lefordította arm-ra buildroot környezetbe (a buildroot itt van: /home/admin/buildroot-2015.02):

~# cat Makefile
############################################################################# Makefile arm RPi

####### Compiler, tools and options

CC = /home/admin/buildroot-2015.02/output/host/usr/bin/ccache /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-gcc
CXX = /home/admin/buildroot-2015.02/output/host/usr/bin/ccache /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
DEFINES = -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g -Wall -W -D_REENTRANT $(DEFINES)
INCPATH = -I../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/qws/linux-arm-g++ -I. -I../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtCore -I../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtNetwork -I../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtGui -I../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include -Ibuild -Ibuild
LINK = /home/admin/buildroot-2015.02/output/host/usr/bin/ccache /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
LFLAGS =
LIBS = $(SUBLIBS) -L/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot//usr/lib -lQtGui -L/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot//usr/lib -lQtNetwork -lQtCore -lpthread
AR = /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-ar cqs
RANLIB = /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-ranlib
QMAKE = /home/admin/buildroot-2015.02/output/build/qt-4.8.6/bin/qmake
TAR = tar -cf
COMPRESS = gzip -9f
COPY = cp -f
SED = sed
COPY_FILE = $(COPY)
COPY_DIR = $(COPY) -r
STRIP = /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip
INSTALL_FILE = install -m 644 -p
INSTALL_DIR = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p

####### Output directory

OBJECTS_DIR = build/

####### Files

SOURCES = main.cpp \
mainwindow.cpp build/moc_mainwindow.cpp
OBJECTS = build/main.o \
build/mainwindow.o \
build/moc_mainwindow.o
DIST = ../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/linux.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base-unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-base.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/qws.conf \
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/qconfig.pri \
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/modules/qt_webkit_version.pri \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_functions.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_config.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/exclusive_builds.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_pre.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/debug.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_post.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/shared.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/warn_on.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/unix/thread.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/moc.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/resources.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/uic.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/yacc.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/lex.prf \
qtdemo.pro
QMAKE_TARGET = qtdemo
DESTDIR = bin/
TARGET = bin/qtdemo

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET): build/ui_mainwindow.h $(OBJECTS)
@$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)

Makefile: qtdemo.pro ../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/qws/linux-arm-g++/qmake.conf ../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/linux.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base-unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-base.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-unix.conf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/qws.conf \
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/qconfig.pri \
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/modules/qt_webkit_version.pri \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_functions.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_config.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/exclusive_builds.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_pre.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/debug.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_post.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/shared.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/warn_on.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/unix/thread.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/moc.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/resources.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/uic.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/yacc.prf \
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/lex.prf \
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtGui.prl \
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtNetwork.prl \
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtCore.prl
$(QMAKE) -spec ../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/qws/linux-arm-g++ CONFIG+=debug -o Makefile qtdemo.pro
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/unix.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/linux.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/gcc-base-unix.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-base.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/g++-unix.conf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/common/qws.conf:
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/qconfig.pri:
../../buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/mkspecs/modules/qt_webkit_version.pri:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_functions.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt_config.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/exclusive_builds.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_pre.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/debug.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/default_post.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/shared.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/warn_on.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/qt.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/unix/thread.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/moc.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/resources.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/uic.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/yacc.prf:
../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/features/lex.prf:
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtGui.prl:
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtNetwork.prl:
/home/admin/buildroot-2015.02/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtCore.prl:
qmake: FORCE
@$(QMAKE) -spec ../../buildroot-2015.02/output/build/qt-4.8.6/mkspecs/qws/linux-arm-g++ CONFIG+=debug -o Makefile qtdemo.pro

dist:
@$(CHK_DIR_EXISTS) build/qtdemo1.0.0 || $(MKDIR) build/qtdemo1.0.0
$(COPY_FILE) --parents $(SOURCES) $(DIST) build/qtdemo1.0.0/ && $(COPY_FILE) --parents mainwindow.h build/qtdemo1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp build/qtdemo1.0.0/ && $(COPY_FILE) --parents mainwindow.ui build/qtdemo1.0.0/ && (cd `dirname build/qtdemo1.0.0` && $(TAR) qtdemo1.0.0.tar qtdemo1.0.0 && $(COMPRESS) qtdemo1.0.0.tar) && $(MOVE) `dirname build/qtdemo1.0.0`/qtdemo1.0.0.tar.gz . && $(DEL_FILE) -r build/qtdemo1.0.0

clean:compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core

####### Sub-libraries

distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile

check: first

mocclean: compiler_moc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_source_make_all

compiler_moc_header_make_all: build/moc_mainwindow.cpp
compiler_moc_header_clean:
-$(DEL_FILE) build/moc_mainwindow.cpp
build/moc_mainwindow.cpp: mainwindow.h
/home/admin/buildroot-2015.02/output/build/qt-4.8.6/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o build/moc_mainwindow.cpp

compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: build/qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) build/qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all: build/ui_mainwindow.h
compiler_uic_clean:
-$(DEL_FILE) build/ui_mainwindow.h
build/ui_mainwindow.h: mainwindow.ui
/home/admin/buildroot-2015.02/output/build/qt-4.8.6/bin/uic mainwindow.ui -o build/ui_mainwindow.h

compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean compiler_uic_clean

####### Compile

build/main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/main.o main.cpp

build/mainwindow.o: mainwindow.cpp mainwindow.h \
build/ui_mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/mainwindow.o mainwindow.cpp

build/moc_mainwindow.o: build/moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/moc_mainwindow.o build/moc_mainwindow.cpp

####### Install

install: FORCE

uninstall: FORCE

FORCE:

############################################################################# Makefile arm RPi

A qmake azért belenyúlt 1-2 útvonalat átírt (../../), de működik. :)

Jó lenne, ha be tudnám állítani, hogy a QtCreator ezt megcsinálja.