2016-08-30 1 views
0

Ich testete SCons Standard-Hardlink-Verhalten.Wie SCons Hardlinks Quellen in Variantenverzeichnis?

Ich erwarte, dass eine Änderung in der Hardlink-Datei in der Variante dir auch in der ursprünglichen Datei widerspiegelt wird. Aber das passiert nicht.

Ist Hardlinking wirklich ein Standardverhalten wie in SCons doc angegeben oder es kopiert nur die Dateien im Variantenverzeichnis?

EDIT:

Einzelheiten über meine Implementierungen/Konfigurationen:

Ich verwende VariantDir mit einem SConscript in der Wurzel des Projekts

Doppelte Option ist in VariantDir

Keine doppelte Option in der Befehlszeile (Standard).

Ich benutze meine eigenen benutzerdefinierten Tools. Ich verwende nur den Programm-Builder aus den standardmäßig in SCons verfügbaren Builders.

Ich habe versucht, die folgenden Flags: Hard-Soft-Copy (Standard), Soft-Hard-Copy, Hard-Copy, Soft-Copy oder Kopie.

Keine von ihnen wird mir eine echte harte Link-Kopie zur Verfügung stellen.

Ich erwarte, dass die folgende:

Wenn ich eine Quelldatei in Variante dir die Änderung in der Originaldatei reflektiert wird ändern (an der ursprünglichen Stelle), da die Datei in Variante dir ein harter Link ist.

Stattdessen wird eine Änderung in der Quelldatei im Variantenverzeichnis nicht in der Originaldatei wiedergegeben.

EDIT 2:

Nach dem Ausführen --debug = duplizieren ich für jede Datei bekam im Abhängigkeitszyklus ähnlich eine Meldung berücksichtigt dies:

dup: relinking variant 'relative_path_to_file' from 'absolute_path' 
+0

Dies hängt weitgehend von den Einstellungen in Ihren SConstruct (s) ab, insbesondere von der Option "duplizieren". Kannst du etwas mehr darüber erzählen, was du versucht hast, welche Befehle du ausführst und welche Art von Ausgabe du erwartest? – dirkbaechle

+0

Ich habe einige Kommentare zu meiner Implementierung hinzugefügt. –

+0

Bitte überprüfen Sie, ob Ihr Betriebssystem und Ihre Python-Version die erforderliche "os.link" -Methode/das entsprechende Attribut für eine ordnungsgemäße feste Verbindung bieten. Sie können auch die Befehlszeile '' --debug = duplicate'' angeben, um zu überprüfen, ob SCons überhaupt versucht, Hard/Soft Links zu erstellen, wenn Sie Ihre aktuelle Konfiguration verwenden. Bitte melde zurück, was du in der Ausgabe siehst ... – dirkbaechle

Antwort

1

Wie in der entsprechenden Python reference docs angegeben, Die zugrundeliegende os.link-Methode, die SCons versucht, intern zu finden und zu verwenden, um feste Links zu erstellen, ist unter Windows nicht verfügbar. Das Gleiche gilt für os.symlink (symbolische/Softlinks), so dass die einzige verbleibende Option für SCons unter Windows darin besteht, die Dateien tatsächlich zu kopieren.

+0

Danke, ich habe das gerade überprüft und es wird keine Link-Methode in os-Modul finden.Gibt es eine Alternative, um dies in Windows zur Verfügung zu stellen? Ich habe gesehen, dass Python 3 dies unter Windows unterstützt ... –

+0

Das SCons-Team arbeitet derzeit an einer gemischten Version 2.7.x/3.y, die diese Funktion dann verfügbar machen wird, wenn Python3 tatsächlich verwendet wird. Achte also auf die bevorstehende Veröffentlichung ... – dirkbaechle

+0

Toll, danke, es gibt auch ein Problem mit der Zeit, die für die Berechnung der Abhängigkeiten von einem Rebuild aufgewendet wurde, wird das auch für die kommenden Releases in Betracht gezogen? –