2016-10-04 1 views
0

Ich möchte SCONs mitteilen, wenn ich eine Headerdatei geändert habe, kompiliere meine Quelldatei nicht neu (Dies ist nur mein Test!) I ' ve bekam hello.c Datei:Scons berechnet nicht korrekt 'ParseDepends' oder 'Ignore' wie ich angegeben habe

#ifdef FOO 
#include"~/headers/n.h" 
#endif 
#include<stdio.h> 
int main(){ 
    printf("hello\n"); 
    return 2; 
} 

Und meine SConstruct Datei ist:

obj=Object('hello.c') 
SideEffect('hello.d',obj) 
ParseDepends('hello.d') 
Program('hello',obj) 

Sie sehen, ich definiere keine "FOO", so die hello.c Datei nicht verwendet meine .h Datei überhaupt. Ich erwarte auch, dass ParseDepends in der Lage sein wird, den C-Präprozessor-Befehl zu lesen, um mein #include "n.h" zu ignorieren, da kein "FOO" definiert ist.

Aber wenn scons ausgeführt wird, und dann nh Datei ändern, scons läuft wieder auslösen von hello.c wieder aufzubauen

Dann habe ich versucht, wie unten ‚Ignorieren‘ zu verwenden Aussage:

hello_obj=Object('hello.c') 
hello=Program(hello_obj) 
Ignore(hello_obj,'n.h') 

Nun, ich habe das gleiche Testergebnis: change in nh wird von scons nicht ignoriert! Warum?

+0

Und warum testen Sie das? Was willst du erreichen? – dirkbaechle

Antwort

1

Verwenden Sie Ignore(). Zitieren its documentation,

Manchmal ist es sinnvoll, ein Programm nicht neu erstellen, auch wenn eine Abhängigkeitsdatei ändert. In diesem Fall würden Sie SCons sagen speziell eine Abhängigkeit

In Ihrem Fall zu ignorieren, ist hier eine komplette SConstruct (änderte ich Ihr C-Programm #include "headers/n.h" sagen):

obj=Object('hello.c') 
Ignore(obj, 'headers/n.h') 
Program('hello',obj) 

Hier ist ein Shell-Sitzung, die beweist, dass es funktioniert:

$ scons -Q -c 
Removed hello.o 
Removed hello 
$ scons -Q 
gcc -o hello.o -c hello.c 
gcc -o hello hello.o 
$ echo hello >> headers/n.h 
$ scons -Q 
scons: `.' is up to date. 
Verwandte Themen