gpt4 book ai didi

python - SCons 构建多个环境

转载 作者:行者123 更新时间:2023-11-28 06:42:45 30 4
gpt4 key购买 nike

精简版是否可以在SConstruct脚本退出前搭建SCons环境?

长版我正在将一些软件从 Windows 移植到 Linux。在 Windows 上,它在 Visual Studio 2013 中构建,使用 MSVC++ 和 Intel Fortran。在 Linux 上,我们使用 g++ 和 gfortran 构建它。

我编写了一个 Python 脚本,它读取 Visual Studio 项目文件(C++ 代码的 .vcxproj 或 Fortran 的 .vfproj)并执行相关的 SCons 构建器来创建构建。我的 SConstruct 文件基本上是这样的:

def convertVSProjectFile(filename):
...

projects = [ 'Source/Proj1/Proj1.vcxproj',
'Source/Proj2/Proj2.vcxproj',
'Source/Proj3/Proj3.vfproj',
...
];
for p in projects:
convertVSProjectFile(filename)

这将及时重新设计以解释 .sln 文件,而不是手动列出项目。

对于 C++ 代码,这工作正常。不过,这是 Fortran 代码的问题。问题出现在两个独立项目中的文件引用同一个 Fortran 模块的地方。 Fortran 扫描器发现了这一点,并使模块的源文件成为两个目标的依赖项。但是,FORTRANMODPATH 构造变量的设置对于两个目标是不同的。 SCons 警告说同一个目标用同一个构建器构建了两次,但随后似乎只是或多或少地随机选择其中一个,因此很难预测 .mod 文件的最终位置。

我可以想到几种方法来解决这个问题: - 分别构建每个环境,构建它,然后继续下一个环境。但我不知道是否有办法做到这一点。 - 为每个目标文件而不是每个项目设置 FORTRANMODPATH。然后 .mod 文件可以放在源文件的对象文件夹中,而不是项目的所有 .mod 文件都放在同一文件夹中。但我也找不到这样做的方法。我可以通过为每个源文件创建一个新的 Environment 来实现吗? - 其他任何人都可以想出的办法。

最佳答案

可以为每个目标指定环境变量

objs += env.Object(target=..., source=..., FORTRANMODPATH=...)

SCons 将看到第二次使用具有不同的 FORTRANMODPATH 并且应该根据需要重建它。

关于python - SCons 构建多个环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643775/

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