프로그램이 설치된 디렉토리 컴파일시에 설정하는 법

jongsuknim의 이미지

제가 작성하고 있는 프로그램내에 img 라는 디렉토리가 있습니다.
제가 작성한 프로그램을 실행시키면 그 img 디렉토리(프로그램이 설치된 디렉토리)의 파일들을 실행시킨 디렉토리(현재 디렉토리)내로 카피시켜야 합니다.

그러기 위해 프로그램이 설치된 디렉토리를 알아야 하는데 이것을
컴파일시에 설정하는 법을 알고 싶습니다.

아마도 configure를 써야 할것 같은데, 어떤 식으로 해야 할지 모르겠습니다.

아니면 이것 보다 더 좋은 방법이 있을까요?

환경변수로 설치된 디렉토리를 지정하는 방법도 있겠네요.. 환경변수로 지정하려면 make install 로 하면 되는 건가요?
이때 Makefile 을 어떻게 작성해야 하나요?(install 부분..)

용가리의 이미지

프로그램을 실행시킬때 디렉토리를 알고자 하면 런타임시에 알아야 겠네요....

그럼 makefile에 넣을것이 아니라 소스파일에서 현재 디렉토리를 읽어와서

처리해야 합니다. 소스파일에서 getcwd() 와 같은 함수를 이용해서

처리하면 됩니다. 자세한 내용이 필요하시면 질문을 좀더 정확하게 해주시면 정확한 해답을 드리도록 하겠습니다.

jongsuknim의 이미지

프로그램이 설치된 디렉토리가 /usr/share/asd 이고
여기에 path가 걸려있어서 어디서든지 프로그램을 실행 할수 있습니다.
예를들어 /home 에서 프로그램을 실행하면
/home/img 라는 디렉토리를 만들어서 /usr/share/asd/img의
내용을 모두 복사하는 것입니다.
/home라는 것은 프로그램 실행 시에 알수 있지만
/usr/share/asd는 사용자가 어디에든지 프로그램을 설치 할 수 있기 때문에 프로그램 제작시에는 결정할수 없습니다.
때문에 make 속에 gcc의 -D 옵션으로 설정하면 될듯 하여 질문을 한 것이었습니다. 이것은 configure로 결정하고요...
이런 문제를 보통 어떤 식으로 해결하는지 알고 싶습니다.

litdream의 이미지

보통은 $...HOME 이라는 env 를 쓰지 않을까요?
예를들자면, $JAVA_HOME

그리고 현재 위치는 위에분이 말씀하신 getcwd() 정도면 되지 않을까요?

삽질의 대마왕...

용가리의 이미지

답변이 좀 늦었네요!

제가 질문의 내용을 잘못 이해하고 답변을 해드린 모양이네요!

님께서 하시고자 하는 작업을 하고자 하신다면 바로 위의분 답변처럼

환경변수에 해당 프로그램이 설치되는 디렉토리를 저장하도록 한

후 소스파일에서 getenv() 함수를 이용해서 하시는게 가장

무난할 것으로 보입니다.

예를 들어, 님께서 /bin 밑에 해당 프로그램을 설치하셨다면

.bashrc 와 같은 파일에

export ASD_HOME_PATH=/bin

과 같이 정의가 되었다고 하면 님의 소스파일에서는

다음과 같이 하면 됩니다.

int main(.....)
{
        char *pchHomePath
        어쩌고_저쩌고;
        
        pchHomePath = getenv("ASD_HOME_PATH");
        if (pchHomePath == null) {
               perror("환경변수 ASD_HOME_PATH를 정의하소!");
               return -1;
        }

       //여기서부터 복사 루틴을 넣으시면 되겠죠.....
}

대충 이렇게 하시면 됩니다.

그리고 gcc 옵션에 -D를 주신다는건 헤더파일에서 #define

하는 것과 동일한 겁니다. 따라서 프로그램이 어디에 설치될지도

모르는 상황에서 프로그램이 설치되는 디렉토리를 미리 정의하는건

좀 모순이 있는듯 하네요!

답변이 되었는지 모르겠네요!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.