SCONS env.Library () не получает ожидаемые флаги компиляции среды - PullRequest
0 голосов
/ 10 октября 2018

У меня следующая проблема: у нас есть большой проект (унаследованный от другой компании), компилирующий много субмул SW. Конструкция FW подразделяется на несколько скриптов SC, которые мы вызываем из основного SConstruct.Дело в том, что все подмодули имеют одни и те же флаги компиляции и определяют.

Я намеревался решить эту проблему следующим решением:

В основной точке входа SConstruct мы определяем определенные параметры компиляции:

COMPILER_FLAGS = '-g \ -O3 \ -fshort-double \ -gdwarf-2 \ -Wall \ -W \ -Werror-неявное-объявление-функции \ -Wno-unused-variable \ -Wno-empty-body \ -Wbad-function-cast \ -Wstrict-prototypes \ -Wmissing-noreturn \ -Wnested-externs \ -fno-builtin \ -Wno-unused-параметр \ -Wno-указатель-на-int-cast \..........

Эти COMPILER_FLAGS представляют среду конструирования, которая передается каждому сценарию в качестве аргумента. Затем внутри каждого сценария я создаю клон среды и изменяю некоторые параметры для каждого.субмодуль

* SConstruct

log_path    = os.path.join('../../CDD/LogPrint/Build/logprint.SC')
objects += SConscript(log_path, exports='env', variant_dir=log_build_dir, duplicate=1)
dbg_exe     = env.Program(dbg_path, objects)

* logprint.SC

\#Customize Compilation options for this component
own_env = env.Clone()
own_env['COMPILER_FLAGS'] += '-O0 '

\# COMPILE SOURCE FILES
objects += own_env.Library(sources)

\# RETURN                     
Return('objects')

Дело в том, что когда я компилирую (и собираю библиотеку) для подмодуля logprint, я надеваюне вижу расширенных собственных скомпилированных flAGS.Я до сих пор вижу в командной строке компиляции напечатанные исходные опции env, унаследованные от основного файла SConstruct.

Есть ли причины, по которым это может происходить?Есть ли какая-либо опция / конфигурация SCONS верхнего уровня, устанавливающая такое поведение?Позвольте мне также подчеркнуть, что я исследовал эту концепцию env.Clone в новом небольшом проекте с нуля, и там он работает.Так что мне интересно, может ли какая-то верхняя конфигурация SCONS блокировать поведение own_env.Library, которое я хочу в «большом» проекте.

1 Ответ

0 голосов
/ 12 октября 2018

Следующее должно делать то, что я считаю, вы пытаетесь сделать.

SConstruct

env=Environment()
env['CCFLAGS'] ='-g -O3 -fshort-double -gdwarf-2 -Wall -W -Werror-implicit-function-declaration -Wno-unused-variable -Wno-empty-body -Wbad-function-cast -Wstrict-prototypes -Wmissing-noreturn  -Wnested-externs -fno-builtin -Wno-unused-parameter -Wno-pointer-to-int-cast'
log_path = os.path.join('../../CDD/LogPrint/Build/logprint.SC')
objects = SConscript(log_path, exports='env', variant_dir=log_build_dir, duplicate=1)
dbg_exe = env.Program(dbg_path, objects)

SConscript

#Customize Compilation options for this component
own_env = env.Clone()
own_env.Append('CCFLAGS' = '-O0 ')

# COMPILE SOURCE FILES
objects = own_env.Library(sources)

# RETURN                     
Return('objects')
...