python - SCons 构建多个环境

标签 python c++ fortran scons gfortran

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

相关文章:

python - 如何在 Fortran 派生类型或类中实现类型绑定(bind)写入语句输出

fortran - 在 Fortran 中使用 CMPLX 函数实现 double 或四精度

fortran - 如何强制 fortran 编译器在子程序违反 "intent(in)"的情况下生成错误,而忽略意图

python - 使用 for 循环和范围函数与 while 循环

python - 使用 python deepcopy 时出现 AttributeError

c++ - 如何动态添加对象

c++ - 动态更改 QLineEdit TextBox 的内部循环

python - 在 setup.py 中声明特定于 Linux 的依赖项

python - SQLAlchemy 的外键约束错误

c++ - 无法释放给定 Maya 类型的内存