精简版 是否可以在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/