Simple makefile pour le C/C++ cibles utilisées avec arm-linux-gcc
Je voudrais cross-compiler un programme simple pour l'architecture ARM à l'aide de l'arm-linux-gcc à la suite de compilateurs [arm-linux-gcc (Buildroot 2011.08) 4.3.6]. J'ai tenté d'utiliser un simple fichier makefile pour compiler le code C, et un autre simple makefile pour compiler du code C++. Par exemple, mon makefile pour du code C est reproduit ci-dessous, mais il ne crée pas un binaire ELF pour la course sur mon système embarqué. Le système hôte est x64 GNU Linux.
Voici la liste de mes très simple makefile pour un programme C:
CC=arm-linux-gcc
CFLAGS=-Wall
main: test.o
clean:
rm -f test test.o
Le makefile ci-dessus reproduit seulement crée un objet de fichier avec l'extension .o, et de ne pas créer un binaire ELF.
J'ai Googlé pour une bonne solution, mais je n'arrive pas à trouver une page web montrant l'exemple le cross-compiler BRAS makefiles pour les programmes C et C++. Peut-être une réponse à ce post pourrait montrer l'exemple.
OriginalL'auteur Nicholas Kinar | 2012-01-04
Vous devez vous connecter pour publier un commentaire.
J'ai essayé votre
Makefile
et changé le suivant:Il a travaillé, après ce qui a changé et a créé un binaire appelé
test
. Il semble qu'il existe une règle implicite qui sait comment faire un lienwhatever
si l'une de ses dépendances estwhatever.o
.Une autre façon est de liste de la règle explicitement:
Cette utilise les macros
$@
(ce qui signifie cible) et$$
(ce qui signifie dépendances).OriginalL'auteur Greg Hewgill
Avoir un regard sur le GNU make manuel (
info make
), L'article 10.2. Il dispose d'un catalogue de règles implicites, c'est à dire les règles où vous n'avez pas besoin d'indiquer explicitement les commandes. Comme @GregHewgill la pensée, la "Liaison d'un objet unique fichier" règle implicite construitN
deN.o
, mais le nom doit correspondre. Par conséquent, vous pouvez soit le nom de votre exécutable comme objet de votre fichier, dans ce casou (en plus la norme, parce qu'elle définit la
all
cible)complètement suffire. Vous pouvez également écrire la règle explicitement, comme Greg Hewgill également décrits. Dans ce cas, la règle est:
Inclure la LDFLAGS et LDLIBS dans votre Makefile, il rend la vie plus facile pour les utilisateurs.
(sic: je pense que LOADLIBES est vraiment LOADLIBS, et l'auteur raté le
-o
).Globalement, je recommande
autoconf
etautomake
au lieu de la main, le laminage à des makefiles. Vous donne un tas de Makefile dispose de très peu de travail.OriginalL'auteur thiton