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 (); }