2016-07-29 6 views
0

アセンブラファイルのコンパイルにはCPPPATH相当のものがありますか? .cppファイルのために完璧に動作しますが、.Sファイルには適用されませんようだScons;アセンブラインクルードディレクトリの構築変数。

CPPPATH=include_dirs 
。 「そのようなファイルやディレクトリがありません」というエラーメッセージが表示される

「ASPATH」のようなものがありますか?

おかげ

PS:回避策として、現在、私は-I/my_pathASFLAGSを使用しますが、私は本当にそれのようにしないでください...

を追加しました:
は、このアプローチ作品(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) 


このアプローチでは(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) 

詳細なスクリプト:

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

あなたはどのアセンブラを使用していますか?どのプラットフォーム? – bdbaddog

+0

アセンブラfor ARM、GNU GCC toolchain、Mac OS版。 – user3124812

答えて

0

必要な回避策があってはならない、あなたにも(as/gas)アセンブラのためCPPPATHを使用することができます。 あなたは(とりわけ) "ASPPCOM"

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

とどのようにそれは "$CPPFLAGS"、 "$_CPPDEFFLAGS" 変数を使用の定義を参照してください "scons | grep AS" のような単純なSConstruct

env = Environment() 
print env.Dump() 

を実行し、 "$_CPPINCFLAGS"も同様です。後者をピックアップ「CPPPATHは」それは

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

scons | grep CPPINCFLAGSを実行する)として定義されていますので、私はあなたのビルドスクリプト内の他のエラー(asPATHでは見られないが?)がある疑いがあるが、これはせずに伝えることは不可能ですa)あなたのSConstructを見て、b)sconsに電話をかける方法とc)完全な逐語的エラーメッセージを表示する。

あなたは私たちに参加し、私たちのユーザーメーリングリスト([email protected]http://scons.org/lists.html参照))に登録したいと思うかもしれませんか?私たちはそこでさらにこの問題について議論することができます。多くの知識のあるユーザーがあなたを手伝ってくれます(それらのすべてがSO上で活動しているわけではありません)。

+0

参照のためにスクリプトの一部を追加しました。しかし、私は同じ結果で 'CPPPATH'をもう一度使ってみました。 – user3124812

+0

ありがとうございます。しかし、私(または他の誰か)があなたの問題を再現するにはまだ十分ではありません。あなたが何らかの作業と自己完結型の最小限の例(MWE)を提供する時間を取らない限り、ここで何が間違っているのかについてはコメントできません。たとえば、 'gen_build_dir'に何が含まれているのか、それがどのように定義されているのか分かりません。多分これらの質問は無関係で、尋ねるべきではないと思うかもしれません。それでは[最小限の、完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)をもう一度読んで、このことを再考することをお勧めします。 – dirkbaechle

+0

説明が更新されます。 150行以上あるので、スクリプト全体を投稿するのは難しいでしょう。 FYI 'a = env.Object()'は後で使用される中間ファイルを生成することです。 't = env.Program()'はこれらの中間ファイルへのPATHを持っていなければなりません。中間ファイルが配置されています。 – user3124812

関連する問題