2011-11-22 4 views
0

BoostIostream의 자동화 된 컴파일을위한 스크립트를 만들려고합니다. 리눅스에서 Zlib을 지원합니다. 현재 내가이 있습니다커스텀 컴파일 된 zlib로 리눅스에서 Boost.Iostream 컴파일하기

#!/bin/bash 

BOOST_DISTRO_SITE=surfnet.dl.sourceforge.net 
BOOST_PROJECT_URL=project/boost/boost 
BOOST_NAME=boost_1_48_0 
BOOST_VERSION=1.48.0 
BOOST_DISTRO_NAME="$BOOST_NAME".tar.gz 
BOOST_ROOT_DIR=boost_libraries 
BOOST_INSTALL_SUBDIR=install-dir 
BOOST_COMPILE_SUBDIR=build-dir 

ZLIB_NAME=zlib-1.2.5 
ZLIB_PROJECT_URL=project/libpng/zlib 
ZLIB_VERSION=1.2.5 
ZLIB_DISTRO_NAME="$ZLIB_NAME".tar.gz 
ZLIB_ROOT_DIR=zlib_libraries 
ZLIB_INSTALL_SUBDIR=install-dir 
ZLIB_COMPILE_SUBDIR=build-dir 



KEEP_OLD="true" 

echo API: boost_net_setup.sh BOOST_ROOT_DIR BOOST_INSTALL_SUBDIR KEEP_OLD BOOST_VERSION BOOST_NAME BOOST_DISTRO_SITE 

if [ "$1" != "" ]; then 
    BOOST_ROOT_DIR="$1" 
fi 

if [ "$2" != "" ]; then 
    BOOST_INSTALL_SUBDIR="$2" 
fi 

if [ "$3" != "" ]; then 
    KEEP_OLD="$3" 
fi 

if [ "$4" != "" ]; then 
    BOOST_VERSION="$4" 
fi 

if [ "$5" != "" ]; then 
    BOOST_NAME="$5" 
fi 

if [ "$6" != "" ]; then 
    BOOST_DISTRO_SITE="$6" 
fi 

#-L protects against redirects 
CURL_CMD=curl\ -L 

# Run a command, and echo before doing so. Also checks the exit 
# status and quits if there was an error. 
# 
# WARNING : Does *not* work when the command uses the redirection operator (>) 
# 
echo_run() 
{ 
    echo "[email protected]" 
    "[email protected]" 
    r=$? 
    if test $r -ne 0 ; then 
     exit $r 
    fi 
} 

extract() # 1=DISTRO_NAME 2=ROOT_DIR 3=NAME 
{ 
    echo_run tar -xzf $1 
    echo_run rm -rf $2 
    echo_run mv $3 $2 
} 

load() # 1=DISTRO_NAME 2=ROOT_DIR 3=NAME 4=VERSION 5=BOOST_DISTRO_SITE 6=INSTALL_SUBDIR 7=PROJECT_URL 
{ 
    if [ ! -e $1 ]; then 
     # get boost 
     echo_run ${CURL_CMD} http://$5/$7/$4/$1 -o $1 
    fi 

    if [ ! -d $2 ]; then 
     echo_run mkdir $2 
    fi 

    # move the boost distro into place 
    if [ ! -d $2/$6/lib ]; then 
     extract $1 $2 $3 
    else 
     if [ ! KEEP_OLD=="true" ]; then 
      extract $1 $2 $3 
     fi 
    fi 
} 


WD=`pwd` 
MACHINE=`uname` 
HERE=`dirname $0` 

cd $HERE 

load $ZLIB_DISTRO_NAME $ZLIB_ROOT_DIR $ZLIB_NAME $ZLIB_VERSION $BOOST_DISTRO_SITE $ZLIB_INSTALL_SUBDIR $ZLIB_PROJECT_URL 

cd $ZLIB_ROOT_DIR 

if [ ! -d $ZLIB_INSTALL_SUBDIR/lib ]; then 
    ./configure --static --prefix=./"$ZLIB_INSTALL_SUBDIR" 
    make 
    make install 
fi 

cd ../ 

load $BOOST_DISTRO_NAME $BOOST_ROOT_DIR $BOOST_NAME $BOOST_VERSION $BOOST_DISTRO_SITE $BOOST_INSTALL_SUBDIR $BOOST_PROJECT_URL 
cd $BOOST_ROOT_DIR 

echo_run ./bootstrap.sh 

echo_run ./b2 -j4 -d0 --with-thread --with-system --with-filesystem --with-program_options --with-regex --with-date_time --with-iostreams -sZLIB_INCLUDE="$WD"/"$ZLIB_ROOT_DIR"/ -sZLIB_BINARY="$WD"/"$ZLIB_ROOT_DIR"/"$ZLIB_INSTALL_SUBDIR"/lib -sNO_BZIP2=1 link=static runtime-link=static --prefix=./$BOOST_INSTALL_SUBDIR release --builddir=./$BOOST_COMPILE_SUBDIR install 

echo Done! 

exit 0; 

는 그러나 곧 내 스크립트 부스트 빌드 명령을 실행하기 시작으로 내가 얻을 :

./b2 -j4 -d0 --with-thread --with-system --with-filesystem --with-program_options --with-regex --with-date_time --with-iostreams -sZLIB_INCLUDE=/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/ -sZLIB_BINARY=/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib -sNO_BZIP2=1 link=static runtime-link=static --prefix=./install-dir release --builddir=./build-dir install 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/class.jam:88: in new 
*** argument error 
* rule object(searched-lib-target)@1055.__init__ (name : project : shared ? : search * : action) 
* called with: (/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib : object(project-target)@294 : : : object(null-action)@1054 : : : : ) 
* extra argument стол/mask-viewer-standalone/MaskLoader/zlib_libraries/install-dir/lib 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:406:see definition of rule '__init__' being called 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:574: in searched-lib-generator.run 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/unix.jam:113: in object(unix-searched-lib-generator)@28.run 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1004: in try-one-generator-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1066: in try-one-generator 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1282: in construct-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1366: in generators.construct 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/tools/builtin.jam:477: in object(lib-generator)@5.run 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1004: in try-one-generator-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1066: in try-one-generator 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1282: in construct-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/generators.jam:1366: in generators.construct 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1495: in construct 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1297: in object(typed-target)@299.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@1040.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:258: in object(project-target)@294.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(install-target-class)@114.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@874.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@108.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@873.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@107.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@872.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in object(alias-target-class)@124.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@878.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:848: in targets.generate-from-reference 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1217: in generate-dependencies 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:1268: in alias-target-class.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boostcpp.jam:409: in build-multiple 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boostcpp.jam:373: in object(top-level-target)@130.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:732: in generate-really 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build/targets.jam:704: in object(main-target)@882.generate 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/build-system.jam:736: in load 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/modules.jam:283: in import 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/tools/build/v2/kernel/bootstrap.jam:142: in boost-build 
/home/tim/Рабочий стол/mask-viewer-standalone/MaskLoader/boost_libraries/boost-build.jam:17: in module scope 
[email protected]:~/Рабочий стол/mask-viewer-standalone/MaskLoader$ 

당신은 거의 모든 리눅스에이 스크립트를 테스트 할 수 있으며 동일한 결과를하여야한다. 내가 우분투 10.04 LTS (최신 부스트 1.48)에 대한 테스트

어떤 도움이나 아이디어 어떻게 이러한 문제를 해결할 수 있습니까?

+1

ASCII가 아닌 문자 또는 공백이 포함되지 않은 경로에서 빌드를 시도 했습니까? 전에'Рабочий стол'와 같은 경로 세그먼트에서 buildscripts가 날아간 것을 보았습니다. – bdonlan

+0

(아마도 완전히 관련이 없지만 ASCII 문자 만 포함 된 디렉토리에서 시도해 보셨나요? 문자가 들어있는 인코딩에 따라 키릴 문자가 일부 도구를 혼동시킬 수 있습니다.) – Mat

+1

Thanks Mat, bdonlan - russian + spaces가 문제의 원인입니다. – myWallJSON

답변

1

많은 빌드 스크립트는 ASCII 문자가 아닌 문자 (예 : Рабочий) 또는 공간 중 하나를 포함하는 경로에 문제가 (너무이 표시 될 수있는 공식적인 답변 응답 된 기록). 빌드하는데 문제가 있다면 경로에 ASCII 문자 만 포함하고 공백을 포함하지 않는 디렉토리로 빌드를 이동해보십시오. 또한 쉘에서 특별한 의미를 가질 수도있는 $!"'과 같은 문자는 피하십시오.