Мы устанавливаем различные версии ускорения в нестандартном месте.Скопление зданий с нестандартным расположением библиотеки ускорения
Затем мы модифицируем CPPPATH
и LIBPATH
, чтобы отразить выбранную форсированную версию. Тем не менее, некоторые заголовки усиления не подхватываются сканером Scanner и поэтому не копируются в место вывода варианта.
Причина они не подхвачены Scanner Scons потому, что они используют макросы, как следующее:
#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_)
Это приводит к файлу не найденных ошибок во время компиляции.
Как мы можем изменить скрипты scons, чтобы они скопировали всю библиотеку форсирования?
Я заглянул в подпрограмму Depends(), но для этого нужен целевой узел, который у нас нет в то время, когда мы приводим Boost в нашу систему сборки. Это потому, что все наши сторонние библиотеки объединены с библиотечным уровнем SConscript, который в основном устанавливает, какая версия 3-го партийного lib должна использоваться (CPPPATH,LIBPATH)
. Когда этот libs SConscript
считывается, целевые узлы ему недоступны, так как это выполняется очень рано в процессе SConstruct
.
Мысли о том, как это решить?
Вот наш SConscript
для "declaring"
подталкивание к нашей среде:
#!/usr/bin/env python
import os
Import('env')
PROJ = 'boost'
TARGET = PROJ
VERSION = '1.57.0'
PATH_INCLUDE = 'cmn/thirdparty/boost/' + VERSION + '/include'
PATH_LIB = 'cmn/thirdparty/boost/' + VERSION + '/lib'
## extend/modify the imported environment
if not PROJ in env['THIRDPARTY']:
env['THIRDPARTY'][PROJ] = {
'TARGET' : TARGET,
'VERSION' : VERSION,
'PATH_INCLUDE' : PATH_INCLUDE,
'PATH_LIB' : PATH_LIB,
}
## because boost emits lots of warnings when compiled under c++11, we use the -isystem flag to disable the warnings
env.Append(CCFLAGS = ['-isystem', os.path.join(env['BUILD_ROOT'], PATH_INCLUDE)])
env.PrependUnique(CPPPATH = [ os.path.join(env['BUILD_ROOT'], PATH_INCLUDE)])
env.PrependUnique(LIBPATH = [os.path.join(env['BUILD_ROOT'], PATH_LIB)]
Я не наблюдал SCons когда-либо копировать файлы, найденные через CPPPATH - хотя мы обычно используем его с ' duplicate = False' anyway – melak47
Кроме того, вы оба добавляете путь включения вручную в CCFLAGS, чтобы избавиться от предупреждений * и * к CPPPATH? Вы уверены, что работает так, как вы планируете? – melak47
Зачем вам нужно копировать весь boost в ваш вариант dir? – bdbaddog