2016-02-24 4 views
0

Мы устанавливаем различные версии ускорения в нестандартном месте.Скопление зданий с нестандартным расположением библиотеки ускорения

Затем мы модифицируем 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)] 
+0

Я не наблюдал SCons когда-либо копировать файлы, найденные через CPPPATH - хотя мы обычно используем его с ' duplicate = False' anyway – melak47

+0

Кроме того, вы оба добавляете путь включения вручную в CCFLAGS, чтобы избавиться от предупреждений * и * к CPPPATH? Вы уверены, что работает так, как вы планируете? – melak47

+0

Зачем вам нужно копировать весь boost в ваш вариант dir? – bdbaddog

ответ

0

РЕШЕНИЕ:

Добавить 2-ой Append к CCFLAGS для 'SRC_ROOT'

env.Append(CCFLAGS = ['-isystem', os.path.join(env['SRC_ROOT'], PATH_INCLUDE)]) 

Я мог бы просто использовать single Приложить выше (для SRC_ROOT) сам по себе, но я все еще видел предупреждения (и копирование файлов Boost в вариант dir), поэтому мне нужен был как системный путь чтобы избежать массового выхода предупреждения.

SRC_ROOT является корнем нашего дерева src. BUILD_ROOT - это корень варианта.

ПРИМЕЧАНИЕ: Вы можете удалить CPPPATH, так как он игнорируется НКУ, когда тот же путь в используемый для -isystem

Смежные вопросы