как заставить SCons строить с относительными путями? - PullRequest
0 голосов
/ 03 августа 2020

У меня следующая структура проекта:

/project
    /src_dirs
        /src_dir_1
        /...
    /include_dirs
        /inc_dir_1
        /...

/output
    SConstruct
        /Sconscripts
            lib1_sconscript
            lib2_sconscript
            /...
    objects/
        /...
    libs/
        /...   

Процесс сборки, вызываемый из каталога output. поэтому все пути в sconscripts относятся к каталогу output. мои файлы sconscript создаются автоматически. как вы можете видеть ниже, пути к исходным файлам и к включаемым файлам являются относительными. это демонстрационный sconscript файл:

Import('libaEnv')
includes = ['../../project/include_dirs/inc_dir_1/be/cmn/inc', '../../project/include_dirs/inc_dir_1/be/be/cmn/api_inc']
directives = ['-CC','-c','-g']
code_switches = ['FAST_RUNG_MLK', 'EN_PRIORITY']
listDefines = code_switches
linkLibs = []

crt = libaEnv.Object(target='objects/crt.o', source='../../project/src_dirs/src_dir_1/crt.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)
ert = libaEnv.Object(target='objects/ert.o', source='../../project/src_dirs/src_dir_1/ert.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)
urt = libaEnv.Object(target='objects/urt.o', source='../../project/src_dirs/src_dir_1/urt.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)

liba = libaEnv.Library (target='libs/liba.a', source=[crt,ert,urt])
Return('liba')

Я видел, что scons вызывает компилятор с абсолютными путями к исходным файлам и файлам заголовков. Я видел это, запустив scons с -verbose (я также подтвердил это, распечатав командную строку в Action.py в методе spawn).

Моя версия scons: SCons 2.5.1 и i я работаю с python 2.7.

Как я могу заставить scons вызывать compiler только с относительными путями?

1 Ответ

0 голосов
/ 03 августа 2020

Один из подходов заключается в том, что вы можете использовать относительную адресацию сверху, например:

includes = ['#project/include_dirs/inc_dir_1/be/cmn/inc', '#project/include_dirs/inc_dir_1/be/be/cmn/api_inc']

Это по-прежнему дает вам абсолютные пути, но они будут вычисляться на основе действительной начальной точки (# = "каталог, содержащий SConsctruct верхнего уровня", следовательно, верхний относительный)

...