2016-07-29 30 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