Un signe est que cette cible n'existe pas, comprenez cela. Un autre est en comparant l'horodatage de modification de la cible et des prérequis. Comment ça marche dans plus de détails? Quelle est la logique de la comparaison des horodatages cible et prérequis et de son fonctionnement lorsqu'il existe plusieurs conditions préalables?Comment faire décider de construire la cible
Répondre
make
premier obtient le temps de modification de la cible, puis compare cette valeur à l'heure de modification de chaque préreq, dans l'ordre de gauche à droite, s'arrêtant dès qu'il trouve un prérequis plus récent que la cible (puisqu'une seule préreq récente est suffisante pour exiger que la cible soit reconstruite).
Par exemple, supposons que vous avez une règle comme ceci:
foo: bar baz boo
En outre, supposons que les temps de modification de ces fichiers sont les suivants:
foo: 4
bar: 3
baz: 6
boo: 2
Dans ce cas, make
comparera l'heure de modification de foo
(4) à l'heure de modification de bar
(3); puisque bar
est plus âgé, make
va se déplacer et compare l'heure de modification de foo
(4) à l'heure de modification de baz
(6). Puisque baz
est plus récent, make
décidera que foo
doit être reconstruit, et arrêtera de vérifier les conditions de foo
(donc boo
ne sera jamais vérifié).
Si vous avez plusieurs lignes de dépendance pour la cible de sortie, comme dans:
foo: bar baz
foo: boo
Les prereqs dans les lignes de dépendance deuxième et les suivantes sont tout simplement ajouté à la fin de la liste des prereqs pour la cible de sortie - - c'est-à-dire que cet exemple est exactement équivalent au premier exemple ci-dessus. En général, toutes les variantes make
se comportent de cette manière, bien que certaines variantes aient des extensions qui modifient ce comportement (par exemple, GNU make inclut des prérequis pour la commande, Sun make a des caractéristiques de "keep state", etc).
Unix make a des règles d'inférence assez compliquées pour déterminer si la cible doit être reconstruite. Pour GNU, vous pouvez les sauvegarder en exécutant 'make -p' dans un répertoire qui n'a pas de Makefile.
De plus, les règles pourraient être enchaînées, plus d'explications à ce sujet est here
Unix standard faire et le travail Microsoft nmake de la même façon