Я хочу настроить drone.io для автоматического тестирования моего C ++ проекта. К сожалению, сборка завершается неудачно каждый раз, потому что SCons не может найти заголовки, которые я только что установил. Я начал с этого:
sudo apt-get install g++ bison flex libgmp-dev glpk libboost-all-dev scons
echo 2 | sudo update-alternatives --config gcc
scons -Q runProgramsTests
но каждый раз сборка не удалась с сообщением:
$ scons -Q runProgramsTests
Your environment does not seem to have header <boost/container/map.hpp>!!
Your environment does not seem to have header <boost/container/set.hpp>!!
Your environment does not seem to have header <boost/container/vector.hpp>!!
Invalid compiler/libraries installation - build terminated!!
Часть скрипта сборки, отвечающая за это сообщение, выглядит так:
# Assuming that instalation is valid unless proved otherwise
validInstallation = True
conf = Configure(env)
# C++ check
if not conf.CheckCXX():
print('Your environment/C++ compiler is not configured/installed correctly!!')
validInstallation = False
# Header check
for header in [
# standard libraries
'algorithm', 'cstdlib', 'iomanip',
'iostream', 'fstream', 'sstream',
'memory',
'stdexcept', 'string', 'utility',
# boost libraries
'boost/scoped_ptr.hpp',
'boost/shared_ptr.hpp',
'boost/weak_ptr.hpp',
'boost/algorithm/string.hpp',
'boost/assign.hpp',
'boost/bimap/bimap.hpp',
'boost/container/map.hpp',
'boost/container/set.hpp',
'boost/container/vector.hpp',
'boost/program_options.hpp',
'boost/range/adaptor/map.hpp',
'boost/range/adaptor/reversed.hpp',
# Flex library
'FlexLexer.h',
# GNU Multiple Precision library
'gmpxx.h',
# GNU Linear Package Kit
'glpk.h'
]:
if not conf.CheckCXXHeader(header):
print('Your environment does not seem to have header <'+header+'>!!')
validInstallation = False
Если это важно SConstruct
содержание можно найти Вот.
Я не понимаю, почему некоторые пакеты Boost найдены, а некоторые нет. На странице droid.io я обнаружил информацию о том, что архивные артефакты, созданные проектом, не могут превышать 10 МБ, но не было информации о лимите установленных библиотек.
Бег sudo ldconfig
перед звонком scons
не помогло и не помогло вручную настроить переменные окружения:
C_INCLUDE_PATH=/usr/include
CPLUS_INCLUDE_PATH=/usr/include
Я что-то пропустил? После всего, что я установил libboost-all-dev
который должен содержать ВСЕ библиотеки Boost и заголовки.
Наконец выяснили причину: drone.io использует старую версию Ubuntu (точную), которая по умолчанию использует библиотеку Boost версии 1.46, а пакет Boost.Container был добавлен в версии 1.48.
После изменения настройки:
sudo apt-get install bison flex glpk libboost1.48-all-dev
echo 2 | sudo update-alternatives --config gcc
scons -Q runProgramsTests
все работает как положено.
Других решений пока нет …