Scons:在构建Fortran时,“FORTRAN*”变量的目的是什么?

4
什么是Scons中的FORTRAN*变量的目的?manpage将其描述为所有Fortran版本的默认设置。但据我所知,在实践中它们从未被使用,因为不同的Fortran语言版本的特定变量始终具有优先权(F77*,F90*,F95*)。
是否有一种方法可以更改文件扩展名到Fortran语言版本的映射,以便某些文件被映射到默认值?

我必须确认你的观察,它们对我也不起作用。尽管手册上说了另外的东西,但我必须使用F90*。我不知道如何改变这种行为。 - Vladimir F Героям слава
1个回答

4
在查看SCons源代码(特别是Tool/FortranCommon.py)时,可以发现FORTRANF77F90F95F03一样被视为方言,而不是它们的父类。看起来,具有.f.for.ftn.fpp.FPP扩展名的源文件将使用FORTRAN变量的变体,尽管可以从FORTRANFILESUFFIXESFORTRANPPFILESUFFIXES变量进行覆盖。设置此内容的代码如下:
def add_fortran_to_env(env):
    """Add Builders and construction variables for Fortran to an Environment."""
    try:
        FortranSuffixes = env['FORTRANFILESUFFIXES']
    except KeyError:
        FortranSuffixes = ['.f', '.for', '.ftn']

    #print "Adding %s to fortran suffixes" % FortranSuffixes
    try:
        FortranPPSuffixes = env['FORTRANPPFILESUFFIXES']
    except KeyError:
        FortranPPSuffixes = ['.fpp', '.FPP']

    DialectAddToEnv(env, "FORTRAN", FortranSuffixes,
                    FortranPPSuffixes, support_module = 1)

其中DialectAddToEnv将值赋给Fortran构建变量,例如(dialect是传递给函数的第二个变量):

 env['%sCOM' % dialect]     = '$%s -o $TARGET -c $%sFLAGS $_%sINCFLAGS $_FORTRANMODFLAG $SOURCES' % (dialect, dialect, dialect)

设置F77F90F95等的代码非常相似,例如:

def add_f90_to_env(env):
    """Add Builders and construction variables for f90 to an Environment."""
    try:
        F90Suffixes = env['F90FILESUFFIXES']
    except KeyError:
        F90Suffixes = ['.f90']

    #print "Adding %s to f90 suffixes" % F90Suffixes
    try:
        F90PPSuffixes = env['F90PPFILESUFFIXES']
    except KeyError:
        F90PPSuffixes = []

    DialectAddToEnv(env, "F90", F90Suffixes, F90PPSuffixes,
                    support_module = 1)

没有从一个方言回退到FORTRAN的机制。每个方言(包括FORTRAN)都是单独的,并且从文件名后缀映射,这些后缀是可配置的。


1
你如何配置后缀到方言的映射?在scons 2.3.4中,只有一个FORTRANSUFFIXES变量包含了所有方言的后缀。 - taerath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接