Einfaches makefile für C/C++ Zielvorgaben mit arm-linux-gcc -
Ich würde gerne cross-kompilieren ein einfaches Programm für die ARM-Architektur mit arm-linux-gcc-suite von Compiler [arm-linux-gcc (Buildroot 2011.08) 4.3.6]. Ich habe versucht, verwenden Sie ein einfaches makefile für die Kompilierung von C-code, und ein anderes einfaches makefile für C++ - code kompilieren. Zum Beispiel, mein makefile für C-code ist nachstehend wiedergegeben, aber es nicht schaffen, ein ELF-binary und läuft auf meinem embedded system. Das host-system ist x64 GNU Linux.
Hier ist die Liste meiner sehr einfachen Makefiles für einen C-Programm:
CC=arm-linux-gcc
CFLAGS=-Wall
main: test.o
clean:
rm -f test test.o
Makefile oben wiedergegeben schafft nur eine Objekt-Datei mit der Erweiterung .o, und nicht ein ELF-Binärdatei.
Habe ich Gegoogelt nach einer guten Lösung, aber ich kann nicht scheinen zu finden, eine Webseite zeigt Beispiel cross-compile ARM makefiles für C-und C++ - Programme. Vielleicht eine Antwort auf diesen Beitrag konnte zeigen solche Beispiele.
InformationsquelleAutor Nicholas Kinar | 2012-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe versucht, Ihr
Makefile
und änderungen die folgenden:Klappte es nach dieser geändert und erstellt eine Binärdatei namens
test
. Es scheint, dass es einige unausgesprochene Regel, dass weiß, wie man linkwhatever
wenn eine Ihrer Abhängigkeiten istwhatever.o
.Ein anderer Weg ist, um eine Liste der Regel explizit:
Diese nutzt die spezielle Makros
$@
(was bedeutet, dass Ziel) und$$
(was bedeutet, dass Abhängigkeiten).InformationsquelleAutor Greg Hewgill
Haben Sie einen Blick auf die GNU-make-manual (
info make
), Abschnitt 10.2. Es hat einen Katalog von den impliziten Regeln, d.h. die Regeln, wo Sie nicht brauchen, um ausdrücklich die Befehle. Wie @GregHewgill dachte, die "Verlinkung eine einzige Objekt-Datei" implizite Regel bautN
ausN.o
, aber die Namen müssen übereinstimmen. Daher können Sie entweder den Namen der ausführbaren Datei, wie Sie Ihr Objekt-Datei, in dem Falloder (mehr standard, weil es definiert die
all
Ziel)völlig ausreichen. Sie können auch schreiben, die Regel explizit, wie Greg Hewgill auch beschrieben. In diesem Fall werden die standard-Regel:
Gehören die LDFLAGS und LDLIBS im Makefile, es macht das Leben einfacher für die Benutzer.
(sic: ich denke, LOADLIBES ist wirklich LOADLIBS, und der Autor verpasst die
-o
).Insgesamt würde ich empfehlen
autoconf
undautomake
statt der hand-rolling makefiles. Gibt Ihnen ein paar Makefile-Funktionen für sehr wenig Arbeit.InformationsquelleAutor thiton