我正在尝试从一个conan.txt文件中提取BINPATH、LIBPATH、CPPPATH,该文件如下所示:
conan = {
"conan" : {
"CPPPATH" : ['something'],
"BINPATH" : ['something'],
"LIBS" : ['something'],
"CPPDEFINES" : [],
"CXXFLAGS" : [],
"CCFLAGS" : [],
"SHLINKFLAGS" : [],
"LINKFLAGS" : [],
},
"conan_version" : "None",
"boost" : {
"CPPPATH" : ['C:\\.conan\\123456\\1\\include'],
"LIBPATH" : ['C:\\.conan\\123456\\1\\lib'],
"BINPATH" : ['C:\\.conan\\123456\\1\\lib'],
"LIBS" : [],
"CPPDEFINES" : [],
"CXXFLAGS" : [],
"CCFLAGS" : [],
"SHLINKFLAGS" : [],
"LINKFLAGS" : [],
},
"boost_version" : "1.69.0"
}
Return('conan')
我有一个scons/python文件,它需要CPPPATH、BINPATH、LIBPATH值作为变量。 我试图在Sconscript中的以下函数中提取这些值:
def getCPPPath():
data = {'Return': lambda x: False}
with open(file.txt, 'r') as f:
exec(f.read(), data)
return (data["conan"]["conan"]["CPPPATH"][0])
print ("Path is:", ["conan"]["conan"]["CPPPATH"][0])
这给了我一个错误:
scons: *** Return of non-existent variable ''conan''
我怎样才能做到这一点
您可以使用以下代码。注意exec是不安全的,因为它运行
file.txt
中的所有代码。您还需要将一个伪Return
函数传递到exec
印刷品
使用exec更容易,而且不需要执行。 您需要将文件命名为
conan.py
(<;=注意.py结尾):假设你想让柯南和斯科恩在一起,还有另一种方法。如果这是“普通”Python,那么其他两个答案将是完全正确的。但是,由于您显然在Conan中使用了SCons生成器(否则,您就不会得到该文件),因此您有一个与SCons兼容的文件。SCons自然在Python之上增加了管理“自己”文件的功能
因此,您根本不需要exec。这就是您所需要的:
这还可以确保添加所需的所有其他标志,而不仅仅是路径。如果您决定添加其他库,还可以保存手动设置
Return('conan')
是一个SCons函数,它基本上相当于从SConscript文件将变量(此处:conan
)返回到执行它的任何文件中。不正确的执行,或者当然不存在变量,足以导致函数抛出。如果正确地获取SConscript文件的源代码,它应该可以正常工作另请参见Conan documentation,特别是第二个代码段和the SCons docs on SConscript files
相关问题 更多 >
编程相关推荐