리눅스 Makefile 질문합니다!

p952973의 이미지

quick:quicksort.o
gcc -o quick quicksort.o

quicksort.o:
gcc -I/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games -c quicksort.c

clean:
rm quicksort.o quick

한 디렉토리 안에 c 파일, 실행파일, o파일, data까지 다 넣고 사용하니 양이 많아질수록 헷갈리게 되더라구요.

Makefile을 이용하면 파일을 종류별로 폴더에 모아 효율적으로 관리하기 좋다고 배웠습니다.

그런데 .o 파일을 만들때 현재 디렉토리가 아닌 .c 파일들이 모여있는 경로에서 가져와 사용하고 싶어서 이렇게 경로 설정을 했더니 에러가 나네요.

(-I 옵션이 헤더를 해당 경로에서 찾는것이란걸 알았습니다....ㅠㅠ)

제가 원하는 경로에서 .c나 .o 파일을 가져와서 실행 파일 디렉토리에 exe파일만 있게 할 수는 없을까요? 혹시 아는분 계신다면 도와주세요!!

익명 사용자의 이미지

-I은 한 번에 하나씩 쓰세요. (/usr/local/sbin/ 같은 건 도대체 왜???)
에러라는 건 컴파일 에러를 말하는 겁니까 링크 에러를 말하는 겁니까? 말로 적지말고 에러 메세지를 그냥 올리세요.
근데, 하고자 하는 건 타겟(quick)이 출력되는 디렉토리만 바꾸려고 하는 것 같은데 그거랑 -I랑 뭔 상관입니까?

p952973의 이미지

사용법을 모르고 옵션에 대해 정확히 몰라서 찾아보면서 공부중입니다.

-I 옵션이 해당 경로에서 파일을 검색해주는 옵션인것 같아서 echo $PATH를 넣은것입니다.

그리고 말을 잘 이해못하시나본데 quick과 Makefile이 같은 폴더에 있고, 나머지 c 파일과 o 파일의 경로가 다를 때 그것들을 가져올 수 있는

방법이 있는가 질문한 것입니다. 그리고 당신은 말투가 상당히 거슬리네요. "그거랑 -I랑 뭔 상관입니까?"라고 왜 되묻죠? 저는 애초에 잘 모른다는

전제 하에 질문을 한 것이고 책이나 구글을 검색해도 원하는 내용이 없어서 이곳에 글을 올렸습니다. 애초에 답글을 다실거면 도와준다는 마음으로

차근차근 설명을 해주셨으면 좋겠습니다. 차라리 답글을 달지 마시던가.

익명 사용자의 이미지

말투가 거슬리게 들렸다면 사과하겠습니다. 별 뜻은 없고 왜 그렇게 생각하셨는지 궁금했을 뿐입니다.

Quote:

-I 옵션이 해당 경로에서 파일을 검색해주는 옵션인것 같아서 echo $PATH를 넣은것입니다.

좀 더 정확히 표현하자면 "파일"이 아니라 "헤더파일"이라고 해야합니다.
소스코드에서 #include 로 지정한 헤더파일들이 존재하는 디렉토리를 지정해야 합니다.
(단, stdio.h와 같이 컴파일러가 제공하는 헤더파일들은 별도로 지정하지 않아도 됩니다.)
따라서, echo $PATH를 넣었다는 것은 넌센스입니다. 물론, 본인이 거기에다가 헤더파일을 넣어두었다면 얘기는 달라지겠지만요.

Quote:

quick과 makefile이 같은 폴더에 있고, 나머지 c 파일과 o 파일의 경로가 다를 때 그것들을 가져올 수 있는 방법이 있는가

저 같으면 "quick과 makefile이 같은 폴더에 있고" -> "makefile이 존재하는 폴더에 quick을 생성하려 하고" 라고 쓰겠습니다만
아무튼, 방법은 여러가지가 있을 수 있으니 뭐가 정답이라고 할 순 없고
$ tree
.
├── include
│   └── myheader.h
├── makefile
├── obj
└── src
    └── quicksort.c

이렇게 있을 때, src/quicksort.c를 컴파일해서 그 오브젝트를 obj/에 넣고, 그 오브젝트를 링크한 실행파일을 makefile이 있는 디렉토리에 넣는다고 한다면 makefile은 대충 이런 모습이 되겠죠.
     1	quick: obj/quicksort.o
     2		gcc -o quick obj/quicksort.o
     3	
     4	obj/quicksort.o: src/quicksort.c
     5		gcc -I./include -c src/quicksort.c -o obj/quicksort.o
     6	
     7	clean:
     8		rm obj/quicksort.o quick

이건 여담이지만, 소스규모가 작을 땐 위 makefile처럼 대충 써도 되지만 규모가 커지면 커질수록 makefile관리하는 거 자체가 큰 일이 됩니다.
요즘 대세는 CMake이니 시간되면 찾아보시기 바랍니다.

세벌의 이미지

저도 여담. 말투가 거슬리게 되면 질문 주제와 다른 방향으로 흘러가는 경우가 많더군요. 익명사용자로 글을 올리셨는데 로그인하고 글을 올리시면 다른 분들이 님의 글에 더욱 믿음을 갖고 읽게 될 것입니다.

댓글 달기

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