| Deutsch English Français Italiano |
|
<87fst657vq.fsf@universite-de-strasbourg.fr.invalid> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!aioe.org!Faqf6A55NG1s8DSVkh3L9A.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
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 (); }