SCons使用多个环境构建
SCons build with multiple environments
短版本在SConstruct脚本退出之前,是否可以构建SCons环境?
长版本我正在将一些软件从Windows移植到Linux。在Windows上,它使用MSVC++和英特尔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
,并应根据需要重建它。
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- docker 构建失败:无法设置环境变量
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 使用 Mingw 构建环境C++?
- 什么是运行英特尔线程构建模块的 XCode 8 环境变量
- 阿尔卑斯构建环境中的 C++ 模板
- 如何在 conda 虚拟环境中安装 c++ 构建工具以与 cython/setproctitle 一起使用
- 如何构建 Caffe 框架 XCode 6.2,iOS 8.3 环境
- 如何为 Windows 预安装环境 (Windows PE) 构建应用程序
- 在没有 cygwin 环境的 Windows 中运行 cygwin 构建的 exe
- 如何将环境变量引入构建中以在#ifdef中使用
- Linux环境下构建32位和64位应用程序(C++)
- SCons使用多个环境构建
- 使用MinGW-w64和Boost.Build的C++构建环境
- c++应用程序在不同环境中的自动构建
- 如何在单个Windows环境中准备生成.dll和unix .so的构建作业
- 可移植构建环境
- 如何构建面向 64 位环境的解决方案