J'ai un grand projet sur lequel je travaille, dans lequel je veux effectuer include
à un fichier .mak, mais seulement après avoir apporté des modifications à ce fichier contenu via une commande dans le makefile d'origine. Comme c'est un grand projet, il sera difficile d'écrire du code, donc je vais donner cet exemple ridicule à la place:makefile: effectuer une inclusion dans un fichier .mak après une certaine action
J'ai un petit projet C que tout son C et les fichiers d'en-tête sont dans le même répertoire, et j'ai besoin d'écrire un fichier makefile. Je ne suis pas autorisé à utiliser la règle clean
dans le makefile que j'écris, mais j'ai un fichier nommé file.mak
que je peux inclure dans mon makefile. Contenu de file.mak
:
.PHONY: clean
cleam:
$(RM) $(objs) test
Le problème ici est que la règle est cleam
et non clean
. Je ne suis pas autorisé à changer manuellement file.mak
, mais je suis autorisé à le faire avec une commande dans le makefile original. Cela peut se faire facilement par:
sed -i 's/cleam/clean/g' file.mak
Je pensais d'écrire le makefile comme ceci:
CC = gcc
srcs = $(wildcard ./*.c)
objs = $(srcs:.c=.o)
test: $(objs) change_file include_file
$(CC) $^ -o [email protected]
%.o: %.c
$(CC) -c $< -o [email protected]
change_file:
$(shell sed -i 's/cleam/clean/g' file.mak)
include_file: change_file
include file.mak
Mais je reçois l'erreur suivante:
include: Command not found
Je comprends qu'il y est un problème d'utilisation d'inclure dans une règle, est-il donc un moyen d'atteindre ce que je veux?
Puis-je ajouter aussi bien et bien documenté que make est, finalement, c'est un outil de niveau trop bas, et je suggèrerais la génération de makefiles par des outils comme CMake. Ils ont été utilisés assez longtemps pour être fiables et prévisibles. A MON HUMBLE AVIS. –
En utilisant mon propre système de construction ** seulement ** sur GNU make, je ne suis pas d'accord avec ça :) Mais je dois admettre que la quantité d'apprentissage est importante pour utiliser GNU correctement et de manière flexible et beaucoup pourraient le trouver plus facile à utiliser des outils supplémentaires ... juste à mon humble avis à partir de GNU autotools, ou vous pourriez perdre vos cheveux :) –
Le problème avec Autotools est une fois que vous allez Autotools dur, il mange beaucoup de votre temps, vous devez absolument justifier en utilisant des autotools de tout. Pour moi, c'est simple: combien de lignes de code dois-je maintenir? "mon propre système de construction" va exactement à l'encontre de cette approche. si vous le faites, et vous avez convaincu votre client/employeur de vous laisser le faire .... bon pour vous. Soyons clairs: ce n'est pas dans leur meilleur intérêt. (sauf si vous êtes l'auteur de projets ouverts comme scons, cmake, ou tous ces nouveaux trucs dont je ne me souviens plus des noms) –