Здравствуйте, я запускаю проблему с использованием относительных путей и изменений в component_dir. У меня есть иерархическая конструкция SCons. Из основного SConstruct я вызываю sub SConcripts, представляющие слои моего проекта:
mcal_build_dir = os.path.join(env.subst('$OUTPUT_DIR'), 'objs', 'MCAL')
infra_build_dir = os.path.join(env.subst('$OUTPUT_DIR'), 'objs', 'INFRA')
mcal_path = os.path.join('../../Targets/TC275/MCAL/SConscript')
infra_path = os.path.join('../../INFRA/SConscript')
mcal_objs = SConscript(mcal_path, exports='env env_base', variant_dir=mcal_build_dir, duplicate=0)
infra_objs = SConscript(infra_path, exports='env env_base', variant_dir=infra_build_dir, duplicate=0)
внутри INFRA / Sconscript
includes = [
'../MCAL/api',
........
........
]
# SOURCE FILES
sources = [
'src/ECU_StartupTask.c',
....
]
for include in includes:
own_env.Append(CPPPATH=[Dir(include).abspath])
Когда он компилирует заголовочные файлы в MCAL /API находятся:
gcc ....... -fno-peephole2 -D_GNU_C_TRICORE_=1 -Ioutput\objs\MCAL\api -IC:\Repositories\fcm3_ssb_sk\Targets\TC275\MCAL\api -Ioutput\objs\ASW\swc_PyroControl\code\api .....
теперь мне нужно иметь 2 разных варианта сборки для mcal, поэтому я попытался выполнить 2 компиляции одного и того же кода в другой сборке dir
mcal_build_dir = os.path.join(env.subst('$OUTPUT_DIR'), 'objs', 'MCAL/hw_3x')
mcal_build_dir2 = os.path.join(env.subst('$OUTPUT_DIR'), 'objs', 'MCAL/hw_4x')
The point is that only changing this the INFRA SConscript does not compile, the headers MCAL/api are not found.
gcc ....... -fno-peephole2 -D_GNU_C_TRICORE_=1 -Ioutput\objs\MCAL\api -Ioutput\objs\ASW\swc_PyroControl\code\api .....
"" "обратите внимание, что абсолютный путь к MCAL \ api не добавляется в строку компиляции" ""
Так что кажется, что по какой-то причине абсолютный путь к -IC: \ Repositories \ fcm3_ssb_sk \ Targets\ TC275 \ MCAL \ api не найден. Я не понимаю связи INFRA / SConstruct с изменением mcal_build_dir. Разве не предполагается быть независимым? Я имею в виду, когда я создаю слой INFRA, который я использую, включает в себя относительные пути к INFRA / SConscript. Я думаю, что когда вы изменяете build_dir, каталог SConscript копируется в build_dir и компилируется там, но как насчет заголовочных файлов самого слоя INFRA? они скопированы? как INFRA / SConscript узнает абсолютный путь к MCAL / api в первый раз, а не во второй раз.