2009-06-19 7 views
2

J'ai eu des problèmes pour faire fonctionner mes fichiers makefile comme je le souhaite. Tout d'abord, je voudrais dire que c'est POSIX faire, comme dans http://www.opengroup.org/onlinepubs/009695399/utilities/make.html J'ai besoin de mon système de construction pour travailler avec les deux BSD et GNU (Linux).Séparation d'objets et de sources avec un fichier makefile

Ce que je veux, c'est un fichier makefile sans maintenance. Je veux juste compiler tous les fichiers .c et .asm dans src/et placer les fichiers objets dans objs/et ensuite relier tout dans objs/vers un fichier binaire.

Je peux faire beaucoup, mais je ne peux pas l'obtenir pour séparer les fichiers source et obj.

Je suis d'accord si cela nécessite un peu de script shell intégré (en utilisant POSIX défini/bin/sh), mais je ne peux tout simplement pas obtenir les dépendances à travailler correctement. Je veux qu'il ne construise le fichier d'objet que si le fichier source est plus récent.

Mon plus proche est la suivante:

 
${C_OBJS}: ${HDRS} ${*:objs/%=src/%}.c 
    ${CC} ${CFLAGS} -c ${*:objs/%=src/%}.c -o $*.o 

Cela a le problème que je dois préciser encore C_OBJS = obj/foo.o et tel et aussi il est à peine et donc pas Posix, compile avec make BSD mais pas GNU make.

Répondre

1

La version POSIX de make ne prend pas explicitement en charge les noms de fichiers avec des barres obliques et ne permet pas non plus de séparer les fichiers sources d'un répertoire différent des fichiers objet. Et, comme indiqué par @caskey, il ne prend en charge aucune notation utilisant les caractères '%', bien qu'il note que de telles règles existent et recommande qu'elles soient réservées pour être utilisées comme métacaractères. Par conséquent, vous ne pouvez probablement pas faire ce que vous voulez avec POSIX make standard.

En pratique, vous pouvez souvent faire ce que vous cherchez avec des implémentations spécifiques de make, mais la makefile résultante a une portabilité limitée.

Pensez à utiliser un système de génération de makefile une sorte - cmake ou les outils automatiques (autoconf, libtool, automake, etc.). Ou l'un des nombreux remaniements des concepts de base de make:

  • scons
  • fourmi
  • gâteau
  • cuisinier
  • soutiens-gorge
  • ... et une douzaine j'ai oublié ou pas entendu parler de ...
0

POSIX make ne supporte pas les constructions comme?

objs/%.o : src/%.c 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

J'ai oublié le point d'interrogation à la fin, j'espère que mon commentaire sera plus clair.

+0

Est-ce que c'est sarcastique? Je suppose que je peux aller juste pour supporter BSD et GNU make, ce qui semble fonctionner sur GNU make, et je pense que c'est "proche" de travailler sur BSD. – Earlz

+0

Ok, attendez, en fait cela ne marche pas du tout pour BSD faire – Earlz