Path: ...!news.mixmin.net!aioe.org!Faqf6A55NG1s8DSVkh3L9A.user.46.165.242.75.POSTED!not-for-mail From: Alain Ketterlin Newsgroups: fr.comp.os.unix Subject: Make =?utf-8?Q?=C3=A9crase?= mes fichiers ! Date: Tue, 12 Oct 2021 22:02:33 +0200 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Message-ID: <87fst657vq.fsf@universite-de-strasbourg.fr.invalid> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: gioia.aioe.org; logging-data="63486"; posting-host="Faqf6A55NG1s8DSVkh3L9A.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) X-Notice: Filtered by postfilter v. 0.9.2 Cancel-Lock: sha1:nvVKpLE+2rtWqVesfmsgzzobU+Q= Bytes: 2722 Lines: 71 Salut, J'ai un probl=C3=A8me =C3=A9trange avec le makefile suivant : # -------- name: name.tab.o name.o name.tab.c: name.y bison name.y # -------- J'ai deux fichiers source, name.y (la grammaire Yacc) et name.c (un main) -- vous avez un contenu "minimal" apr=C3=A8s ma signature. Avec ces trois fichiers, si name.c est plus r=C3=A9cent que name.y, "make" (GNUmake 4.1) fait : | cc -c -o name.o name.c | bison name.y | cc -c -o name.tab.o name.tab.c | cc name.o name.tab.o -o name Exactement ce que je veux. Si maintenant je fais "touch name.y ; make" (ou si name.y est le plus r=C3=A9cent des deux au d=C3=A9part), voil=C3=A0 = ce qui se passe : | yacc name.y=20 | mv -f y.tab.c name.c | cc -c -o name.o name.c | bison name.y | ... WHAT THE FUCK ! Make commence par =C3=A9craser mon fichier name.c (par yacc+mv) juste parce qu'il a une r=C3=A8gle pour le faire. Je veux bien croire que make a un peu de boulot avec toutes ces r=C3=A8gles implicites =C3=A0 appliquer, mais l=C3=A0 il =C3=A9crase mon fichier... (aj= outer une d=C3=A9pendance "name.o: name.c" avec ou sans commande ne r=C3=A8gle pas le probl=C3=A8me). Y a-t-il un moyen de lister les fichiers source ? Ou en tout cas les fichiers =C3=A0 ne pas =C3=A9craser ? make --version dit | GNU Make 4.1 | Built for x86_64-pc-linux-gnu | ... (licence omise) Vous avez un avis ? (Inutile de d=C3=A9piauter les r=C3=A8gles implicites, = je me pose une question de principe dans ce cas.) -- Alain. PS : deux fichiers minimaux (qui compilent) si vous voulez r=C3=A9p=C3=A9ter l'exp=C3=A9rience // name.y %{ int yylex() { return 0; } int yyerror (const char * msg) {} %} %% input: %empty; %% //name.c extern int yyparse(); int main (void) { return yyparse (); }