设置scons的环境变量以在我的系统上全局使用

时间:2014-05-15 06:13:10

标签: build environment-variables scons

有没有办法为我的系统设置scons将使用的环境变量,而不必更改SConstruct文件?例如,我想在Windows上使用MinGW而不是VC ++来构建我的C ++。当然,我可以在我的SConstruct文件中执行此操作:

env = Environment(tools = ['mingw'])

但是,如果我这样做,那么我就可以将内容编辑到我的构建文件中,使其特定于我的特定系统配置。在我看来,这破坏了便携式构建系统的整个目的。如果我上传它作为我的存储库的一部分供其他人构建,他们可能没有使用MinGW。他们可能想要使用VC ++或Clang,并且我认为他们不应该为了构建程序或库而修改构建文件(或存储库中的任何其他内容)。理想情况下,在具有功能性C ++工具链和安装了的scons的环境中的任何人都应该能够在命令行上键入scons,并且事情应该顺利进行。不是scons的(或者)目标吗?还是我误解了它的目的?

另一件事是路径。上面的行甚至不够,我还是要导入MinGW二进制文件的路径。我已经读过这个理由。但它只是更多系统特定的信息,我必须放在我的构建文件中,其他人可能会使用所选择的路径不适用。

2 个答案:

答案 0 :(得分:0)

我认为你确实理解了SCons关于便携式和多平台的目的:)

这里的问题是如果您的系统上有多个编译器可供选择,如何告诉SCons使用哪一个。默认情况下,SCons将查找并使用特定于您系统的编译器(例如,Windows上的VC ++或Linux上的g ++)。

我至少可以想到两种告诉SCons使用哪种编译器的方法,这两种方法都需要构建脚本中的额外逻辑,但可以以可移植的方式完成:

  1. 环境变量
  2. 命令行参数
  3. 我会考虑始终使用特定于系统的编译器,除非用户使用参数/变量调用scons指示它使用不同的编译器。

    如果您选择使用环境变量,您可以使用标准的python代码,如下所示,并解释here

    import os
    
    some_var = os.environ['SOME_VAR']
    

    或者,如果您选择使用命令行参数,则可以找到所需的所有内容here

    就个人而言,我更喜欢命令行选项,因为它比env vars更明确。使用env vars,由于他们没有意识到设置的环境,用户可能会得到不希望的结果。

答案 1 :(得分:0)

尝试在其中一个目录中编辑文件site_init.py

%ALLUSERSPROFILE/Application Data/scons/site_scons
%USERPROFILE%/Local Settings/Application Data/scons/site_scons
%APPDATA%/scons/site_scons
%HOME%/.scons/site_scons
./site_scons

在该文件中,添加如下所示的行:

DefaultEnvironment(tools = ['mingw'])

或者这个:

DefaultEnvironment(tools = ['default', 'mingw'])