2016-07-29 4 views
0

Ich frage mich, gibt es ein Äquivalent von CPPPATH für die Erstellung von Assembler-Dateien?Scons; Konstruktionsvariable für Assembler Include-Verzeichnis;

CPPPATH=include_dirs 

funktioniert perfekt für .cpp Dateien, aber es scheint für .S Dateien nicht gelten. Ich habe Fehlermeldung wie "keine solche Datei oder Verzeichnis"

So gibt es eine Art von "ASPATH"?

Dank

PS: Als Abhilfe, die ich zur Zeit ASFLAGS mit -I/my_path benutzen, aber ich weiß nicht wirklich, wie es ...

ZUSÄTZLICH:
dieser Ansatz funktioniert (ASFLAGS)

asm_dirs = '-I' + gen_build_dir + gen_file_dir + ' ' #relative path here 
as_flags = asm_dirs + env['ASFLAGS'] 
t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, ASFLAGS=as_flags, 
    LINKFLAGS=link_flags) 


dieser Ansatz nicht (CPPPATH)

include_dirs += [ #add path to 'CPPPATH' 
    gen_build_dir + gen_file_dir + ' ' 
] 
t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, LINKFLAGS=link_flags) 

Detaillierte Skript:

asm_cppflags = ('-S -Wno-invalid-offsetof ') 
gen_build_dir = 'build/Italy4K6/rel/' 
gen_file_dir = 'OS/UserAccess/' 
gen_file_name = 'UserAccess_HandleSysCall_ConstGen' 
src_full_name = gen_file_dir + gen_file_name + '.cpp' 
obj_full_name = gen_build_dir + gen_file_dir + gen_file_name + '.o' 
dst_full_name = gen_build_dir + gen_file_dir + gen_file_name + '.h' 
a = env.Object(src_full_name, CPPFLAGS=asm_cppflags, CPPPATH=include_dirs) 
gen = env.Command(target = "HEADER", source = "", 
    action = "cat " + obj_full_name + " | " + gen_script + " > " + dst_full_name) 
Depends(gen, a) 
asm_dirs = '-I' + gen_build_dir + gen_file_dir + ' ' 
as_flags = asm_dirs + env['ASFLAGS'] 

link_script = 'Targets/LinkerScripts/%s.ld' % product 
link_flags = ('-nodefaultlibs -nostartfiles -Wl,-T -Wl,%s -Wl,-Map -Wl,LINK.MAP ' % link_script) + env['LINKFLAGS'] 

t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, ASFLAGS=as_flags, 
     LINKFLAGS=link_flags) 
Depends(t, link_script) 
+0

Welchen Assembler verwenden Sie? Welche Plattform? – bdbaddog

+0

Assembler für ARM, GNU GCC Toolchain, unter Mac OS. – user3124812

Antwort

0

Es sollte keine Abhilfe notwendig sein, können Sie CPPPATH für Assembler (as/gas) als auch nutzen. Beim Ausführen der einfachen SConstruct

env = Environment() 
print env.Dump() 

als "scons | grep AS" Sie sehen (unter anderem) die Definition von "ASPPCOM"

'ASPPCOM': '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES' 

und wie es die Variablen "$CPPFLAGS" verwendet, "$_CPPDEFFLAGS" und "$_CPPINCFLAGS" auch. Letztere nimmt den „CPPPATH“, da es als definiert ist (run scons | grep CPPINCFLAGS)

'_CPPINCFLAGS': '$(${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' 

Ich vermute, es gibt einige andere Fehler in der Build-Skripte (as nicht in PATH gefunden?), Aber das ist unmöglich zu sagen, ohne Sehen Sie a) Ihre SConstruct, b) wie Sie scons aufrufen und c) die vollständige wörtliche Fehlermeldung.

Vielleicht möchten Sie uns beitreten und unsere User Mailing-Liste unter [email protected] (siehe http://scons.org/lists.html) abonnieren? Wir könnten dieses Problem dort weiter diskutieren, mit vielen sachkundigen Benutzern, die Ihnen helfen können (nicht alle von ihnen sind in SO aktiv).

+0

Ich habe einen Teil des Skripts zur Referenz hinzugefügt. Trotzdem habe ich versucht, 'CPPPATH' erneut mit dem gleichen Ergebnis zu verwenden. – user3124812

+0

Danke, aber es ist immer noch nicht genug für mich (oder irgendjemand anderen), um Ihr Problem reproduzieren zu können. Solange du dir nicht die Zeit nimmst, ein funktionierendes und in sich geschlossenes minimales Beispiel zu liefern (MWE), kann ich nicht sagen, was hier falsch ist. Zum Beispiel weiß ich nicht, was gen_build_dir beinhaltet oder wie es definiert ist. Vielleicht denkst du, dass diese Fragen irrelevant sind und nicht gefragt werden sollten ...dann empfehle ich Ihnen, [Wie man ein minimales, vollständiges und verifizierbares Beispiel erstellt] (http://stackoverflow.com/help/mcve) erneut zu lesen und dann Ihre Einstellung dazu zu überdenken. – dirkbaechle

+0

Beschreibung ist aktualisiert. Es wäre schwierig, ein ganzes Skript zu veröffentlichen, da es mehr als 150 Zeilen lang ist. FYI 'a = env.Object()' erzeugt Zwischendateien, die später verwendet werden. 't = env.Program()' sollte PATH zu diesen Zwischendateien haben. Zwischendateien sind an Ort und Stelle. – user3124812