make install로 설치하는 것과 --prefix 경로에있는 파일들을 cp로 복사하는것과 차이가 있나요??

xoduddk123의 이미지

안녕하세요

프로그램을 크로스컴파일하고있습니다.

그런데 이상하게도 make install을 하면 잘 작동을하는데

--prefix로 다른경로로 설정을 해두고 해당경로에 make install하여서 나온 부속결과물들을 cp로 복사를 하면 정상적으로 작동을 안합니다.

이러한 현상이 신기한데

make install과 --prefix로 make install 경로를 따로 설정해서 나온 부속결과물들을 cp로 복사하는 것들에 대해서 어떠한 차이점이 있나요??

klyx의 이미지

우선 make가 하는 동작은 결국 쉘스크립트와 같습니다. 파일을 복사해야되면 cp를 쓰고, 옮겨야되면 mv를 쓰고 지워야되면 rm을 씁니다. 실제로 파일을 '설치'하는 경우에는 install이라는 명령어를 쓰는게 보통이지만, 아무튼 쉘에서 직접 cp를 호출하는 것과, make를 통해서 호출하는 것에 차이는 없습니다.

파일을 복사했을 때 실행이 안된다면 프로그램 자체에 경로 의존적인 부분이 있고, 그게 --prefix 옵션에 의존해서 결정된다는 뜻이겠죠.

yeonpil_net의 이미지


라이브러리를 찾을 수 없기 때문이죠.

1. 링크시 rpath옵션
2. LD_LIBRARY_PATH 환경변수 세팅

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

Necromancer의 이미지

make install이 단순한 복사만 한다면 상관이 없는데
웬간한 프로그램들은 make install 할 때 복사뿐만 아니라 경로에 맞게 설정파일을 편집하는 스크립트나 자동설정 프로그램들(설치시에만 작동하고 설치되지 않는 것도 있을 수 있음)을 같이 실행시킵니다.

cp만으로 안된다면 make install 시 실행되는 부분들을 분석해서 뭘 하는지 파악해야 합니다.

Written By the Black Knight of Destruction

bushi의 이미지

configure 의 --prefix 옵션에 주어지는 path 는 default path 의 일부로 소스와 같이 컴파일되는 경우가 흔합니다.
예를 들어 /etc/xxx.cfg 가 아니라 /my/prefix/path/etc/xxx.cfg 를 기본 참조하도록 프로그램이 바뀐다는 겁니다.

install path 만 변경하고 싶다면 configure 의 --prefix 에선 install path 전체를 빼시고,
make DESTDIR=/my/prefix/path install
로 "설치" 하시면되는데, autoconf/automake 를 사용해서 작성된 프로젝트일 경우에만 가능합니다.

위에 설명한 방식대로 하실 경우에 한가지 신경쓰실 문제가 있습니다.
라이브러리들의 경우에 .pc 파일에 pkgconfig 가 사용할 path 가 기록되어 설치되는데,
.pc 파일에 기록된 path 에는 DESTDIR 이 포함되지 않기 때문에
이 라이브러리를 참조하는 다른 것을 크로스 컴파일 해야 할 경우에
pkgconfig 가 어떤 경로의 .pc 파일을 참조하고,
참조한 pc 파일 내의 path 정보가 어떻게 되는지 주의깊게 살펴서 수정할 것은 직접 수작업으로 pc 파일을 수정하셔야 하는데요,
여기까지는 당연한 얘긴데...
라이브러리들 중에는 .pc 파일 뿐만 아니라 xxx-config 같은 전용 스크립트를 제공하는 놈이 종종있고,
이 라이브러리를 이용하는 프로젝트의 configure 에서 pkgconfig 가 아니라 저런 전용 스크립트를 사용해서 cflag, lib 경로 따위를 가져오는 경우가 흔합니다.
그러니... 혹시 이런 스크립트를 제공/사용하는 경우가 있다면 같이 수정해야 합니다.

xxx-config 의 예를 보시려면... 사용하시는 desktop linux 에서 ls /usr/bin/*-config 해보시면 아마도 몇 개 나올겁니다.
제 경우엔

$ ls /usr/bin/*-config
/usr/bin/apt-config        /usr/bin/ncursesw5-config
/usr/bin/byobu-config      /usr/bin/net-snmp-config
/usr/bin/freetype-config   /usr/bin/orbit2-config
/usr/bin/gpg-error-config  /usr/bin/pkg-config
/usr/bin/libart2-config    /usr/bin/rarian-sk-config
/usr/bin/libgcrypt-config  /usr/bin/scrollkeeper-config
/usr/bin/libpng-config     /usr/bin/xft-config
/usr/bin/libpng12-config   /usr/bin/xml2-config
/usr/bin/ncurses5-config

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.