2016-12-09 4 views
0

크로스 플랫폼 소프트웨어를 개발 중이고 Zip 패키지로 배포하려고합니다.의존성이있는 패키지 소프트웨어 - 얼마나 깊게 가야합니까?

Linux의 경우 패키지와의 종속성을 패키지하지 않습니다. Windows의 경우 패키지에 dll도 배포합니다.

Mac OS X의 경우 모든 dylib 파일을 빌드 폴더에 반복적으로 복사하고 링크를 변경하는 스크립트가 있습니다.

물론 이것은 패키지하지 않아야하는 파일 목록으로 연결됩니다. libsystem_malloc.dylib, libremovefile.dylib.

/usr/local/*에 dylibs를 설치하거나 모든 OS X 설치에서 사용할 수있는 파일을 포함하지 않는 체계적인 방법이 있습니까?

종속성 중 대부분 (지금은 모두 OK)이 Homebrew 패키지입니다. 도움이된다면.

에 관심있는 사람들을위한

, 이것은 재귀 적으로 복사하고 다시 링크에 대한 배쉬 코드 : 만 /usr/local/에서 라이브러리를 팩, 지금은

while true; do 
    INSTALLED=0 
    for dylib in *.dylib; do 
     LIBS=`otool -L $dylib` 
     if [ "x$LIBS" != "x" ]; then 
      echo "$dylib is using:" 
      for lib in $LIBS{@:2}; do 
       if echo $lib | grep --quiet 'dylib$'; then 
        echo " $lib" 
        new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'` 
        if [ -e $PD_APP_LIB/$new_lib ]; then 
         echo "$PD_APP_LIB/$new_lib already exists, skipping copy." 
        else 
         install -vp $lib $PD_APP_LIB 
         INSTALLED=1 
        fi 
        install_name_tool -id @loader_path/$new_lib $PD_APP_LIB/$new_lib 
        install_name_tool -change $lib @loader_path/$new_lib $dylib 
       fi 
      done 
      echo " " 
     fi 
    done 
    if [ $INSTALLED -eq 0 ]; then 
     break 
    fi 
done 

답변

0

, 스크립트는 다음과 같습니다

while true; do 
    INSTALLED=0 
    for dylib in *.dylib; do 
     LIBS=`otool -L $dylib` 
     if [ "x$LIBS" != "x" ]; then 
      echo "$dylib is using:" 
      for lib in $LIBS{@:2}; do 
       # The following line has been changed 
       if echo $lib | grep --quiet '^/usr/local/.*dylib$'; then 
        echo " $lib" 
        new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'` 
        if [ -e $PD_APP_LIB/$new_lib ]; then 
         echo "$PD_APP_LIB/$new_lib already exists, skipping copy." 
        else 
         install -vp $lib $PD_APP_LIB 
         INSTALLED=1 
        fi 
        install_name_tool -id @loader_path/$new_lib $PD_APP_LIB/$new_lib 
        install_name_tool -change $lib @loader_path/$new_lib $dylib 
       fi 
      done 
      echo " " 
     fi 
    done 
    if [ $INSTALLED -eq 0 ]; then 
     break 
    fi 
done 
관련 문제