2016-07-29 71 views
0

我在想編譯彙編文件是否有一些等效的CPPPATHScons;彙編器的構造變量包括目錄;

CPPPATH=include_dirs 

完全適用於.cpp文件,但它似乎沒有申請.S文件。我得到像「沒有這樣的文件或目錄」的錯誤信息

那麼是否有某種'ASPATH'?

感謝

PS:至於解決方法目前我用ASFLAGS-I/my_path,但我真的不喜歡它...

新增:
這種方法適用(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

彙編ARM,GNU GCC工具鏈,在mac os下。 – user3124812

回答

0

應該有沒有解決方法需要,您可以使用CPPPATH爲彙編(as/gas)爲好。 當運行簡單SConstruct

env = Environment() 
print env.Dump() 

爲 「scons | grep AS」 你看(其中包括)的 「ASPPCOM

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

以及它如何使用變量 「$CPPFLAGS」, 「$_CPPDEFFLAGS」 的定義和「$_CPPINCFLAGS」也是如此。後者拾起「CPPPATH」,因爲它被定義爲(運行scons | grep CPPINCFLAGS

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

我懷疑是在你的構建腳本其他一些錯誤(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()'應該有這些中間文件的路徑。中間文件已到位。 – user3124812