gpt4 book ai didi

scons - scons是否知道SConscript文件位于哪个目录中?

转载 作者:行者123 更新时间:2023-12-04 07:57:16 25 4
gpt4 key购买 nike

我们正在将scons作为构建系统进行评估,而在容纳旧系统时遇到了问题。在某些源代码子目录中,我们有一个“sources.lib”文件,其中列出了需要编译以汇编该目录的目标库的C++文件的名称。但是,同一目录中还有其他C++文件,因此我不能仅使用Glob()查找合适的文件。

如何找到SConscript文件所在的目录? os.getcwd()始终返回构建目录。即使文档指出SConscript中的路径是相对于源目录的路径(否则,Glob('*。cpp')都不起作用),但仅执行open('sources.lib')仍然会失败,因为它会查找文件在构建目录中。最后,该SConscript文件中的构建环境不包含实际的当前源目录。

编辑this reply中看起来像

File('sources.lib').srcnode().abspath

返回正确的文件名和目录 ,但返回,它不会告诉您文件名和目录是否存在(必须使用os.path.isfile)。看来
Dir('.').srcnode().abspath

会告诉您SConstruct文件所在的位置。

示例在定义要为库编译的源文件时,我不想使用
lib = env.SharedLibrary('mylib', Glob('*.cpp'))

但是相反,宁愿构造一个函数,该函数首先检查“sources.lib”是否存在,如果不存在,则使用globbing。所以我像这样定义我的图书馆
lib = env.SharedLibrary('mylib', env.getSources('*.cpp'))

并制作一个读取文件的功能(如果存在)

def getSources(self,pattern):

#分配给目标的源文件列表
来源= []
#srcFile ='sources.lib'#失败
#srcFile = os.path.join(os.getcwd(),'sources.lib')#失败
srcFile = File('sources.lib')。srcnode()。abspath#有效

#寻找sources.lib
尝试:
infile = open(srcFile,'r')
除了IOError:
#print“获取资源的通行证”
来源=地球(模式,字符串=真)
别的:
#print“正在读取sources.lib”
对于infile.readlines()中的行:
line = line.rstrip('\n\r')
如果行!='':
sources.append(行)

退货来源

buildEnv.AddMethod(getSources)

这似乎有效。直到今天我才知道File.srcnode()。abspath。

最佳答案

我使用以下代码:

this_sconscript_file = (lambda x:x).func_code.co_filename
code_base = os.path.dirname(this_sconscript_file)

关于scons - scons是否知道SConscript文件位于哪个目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com