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

长版
我正在将某些软件从Windows移植到Linux。在Windows上,它使用MSVC ++和Intel Fortran在Visual Studio 2013中构建。在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/

10-12 20:25
查看更多