我通过ParseFlags设置CPPPATH变量:
env = Environment()
env["CXX"] = "clang++"
d = env.ParseFlags("-I. -I../utl")
print d
env.StaticLibrary(target="myLib",source = source_files)
d的打印显示CPPPATH设置为正确的目录:
{'CPPFLAGS':[],'FRAMEWORKPATH':[],'LIBPATH':[],'CXXFLAGS':[], 'LIBS':[],'ASFLAGS':[],'LINKFLAGS':[],'RPATH':[],'CPPDEFINES': [],'FRAMEWORKS':[],'CCFLAGS':[],'CFLAGS':[],'CPPPATH':['。', '../ UTL']}
但是,编译输出没有-I选项:
clang++ -o ABC_Exception.o -c ABC_Exception.cpp
未能在../ utl
中找到包含文件./ ABC_Exception.hpp:4:10:致命错误:找不到'Exception.hpp'文件
答案 0 :(得分:2)
ParseFlags 后面应该跟 MergeFlags 一起将变量添加到环境中,如SCons documentation中所述。
ParseFlags返回包含分发选项的字典 进入各自的建筑变量。通常,这个 字典将被传递给MergeFlags以将选项合并到一个 建筑环境,但如果需要,可以编辑字典 提供附加功能。 (注意,如果标志不是 将要编辑,直接调用MergeFlags选项将 避免额外的步骤。)
在您的示例中,您只需使用传递给ParseFlags的字符串调用MergeFlags即可。