我想知道汇编文件的编译是否有CPPPATH
的等价物?
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 :(得分:0)
不需要解决方法,您也可以将CPPPATH
用于汇编程序(as
/ gas
)。
运行简单的SConstruct
env = Environment()
print env.Dump()
as" 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)} $)'
我怀疑您的构建脚本中存在其他错误(as
中找不到PATH
?),但如果没有看到您的SConstruct,则无法判断,b)您如何调用{ {1}}和c)完整的逐字错误消息。
也许您想加入我们并订阅我们的用户邮件列表scons-users@scons.org(请参阅http://scons.org/lists.html)?我们可以在那里进一步讨论这个问题,有很多知识渊博的用户可以帮助你(并非所有用户都在SO上活动)。