Makefile denkt immer, dass das Projekt auf dem neuesten Stand ist - aber Dateien existieren nicht einmal

8

Ich habe folgendes Makefile:

%Vor%

Die Idee ist, dass ich versuche, zwei verschiedene .cc / .h-Dateien zu verknüpfen, je nachdem, welche Implementierung ich verwenden möchte. Wenn ich real_clean mache, existiert keine der .cc / .h Dateien, ich habe nur eine driver.cc Datei und das Makefile im Ordner. Wenn ich make anrufe, heißt es, sie sind auf dem neuesten Stand. Das passiert sogar, wenn ich die Dateien in adjl / adm editiere, um sie zu "neueren" Versionen zu machen.

%Vor%

Ich habe das Template-Makefile von einem anderen Projekt genommen, das ich gemacht habe, und sie sind auf die gleiche Weise geschrieben, aber ich kann wiederholt die gleichen Befehle ohne "aktuelle" Probleme machen.

Ich habe gegoogelt, aber habe kein Problem gefunden, das meinen ähnlich ist (sie scheinen im Allgemeinen Benutzer einzubeziehen, die nicht putzen, bevor sie machen).

Danke an alle zum Lesen.

    
Dwayne 14.12.2010, 02:49
quelle

3 Antworten

18

Das Problem besteht darin, dass Sie in Makefile dasselbe Verzeichnis wie Ihre Ziele benannt haben.

Wenn du make adjl ausgibst, suche nach der Datei adjl , die es findet und nichts tut. Benenne Ziele in etwas anderes um und versuche es erneut.

    
stefanB 14.12.2010, 02:59
quelle
9

Die Ziele adjl und adjm sind echte Ziele. Da sie keine Abhängigkeiten haben und die Dateien vorhanden sind (die 2 Verzeichnisse in Ihrem Eintrag), macht make nichts (weil sie in der Nähe sind).

Sie möchten jedoch adjl und adjm als falsche Ziele angeben (damit die Befehle ausgeführt werden, wenn Sie sie angeben). Um dies zu tun,

%Vor%

Lesen Sie Ссылка , um weitere Informationen zu erhalten.

BEARBEITEN

Tatsächlich sollten die Regeln real_clean und clean wahrscheinlich auch falsch gemacht werden.

    
lijie 14.12.2010 02:56
quelle
3

Sie haben Verzeichnisse mit dem gleichen Namen wie Ihre Ziele.

Da Ihre Ziele von nichts abhängen, werden sie immer als aktuell angesehen.

Wenn Sie ein Ziel angeben, das nicht mit einer Datei auf der Festplatte verknüpft ist, müssen Sie das spezielle Ziel .PHONY :

verwenden %Vor%

Sie sollten das Gleiche auch für Ihre clean und real_clean Ziele tun - sonst brechen sie, wenn jemand eine Datei namens "clean" erstellt.

    
Anon. 14.12.2010 02:58
quelle

Tags und Links