2010-05-04 5 views
1

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

2

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).

0

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

Questions connexes