리눅스왕초보자입니다.makefile에 대해서 질문입니다~
안녕하세요 이번엔 임베디드를 처음 접하면서 리눅스를 동시에 처음으로 접하게 된늠입니다~ ^^
다름이 아니라 c언어로 프로그래밍을 해서 컴파일할때 makefile을 사용하면 더욱 간단하게 된다고 하길래 강좌도 보고 KLDP에 나오
는 강좌도 보고 있습니다만 그게 이해하기가 그렇게 쉽지가 않네요...본론으로 말씀드려서 한가지만 질문을 드리겠습니다.
아주 기초적인 makefile사용에 대해서요
test : main.o read.o write.o
gcc -o test main.o read.o write.o
main.o : io.h main.c
gcc -c main.c
read.o : io.h read.c
gcc -c read.c
write.o: io.h write.c
gcc -c write.c
vi makefile 이라는 파일을 만들어서 그대로 적어서 실행시켰는데 || make: *** `main.o'에서 필요로 하는 타겟 `stdio.h'를 만들 규칙이 없습니다. 멈춤.|| <----이런 에러가 뜹니다 물론 main.c read.c write.c 세파일을 생성했구요 셋다 stdio.h헤더파일을 쓰고요.
그리고 read.c write.c파일은 아무것도 안적고
#include stdio.h
int main(void)
{
return 0;
}
이런 문장만 쓰고 저장했습니다....main.c는 간단한 코딩을 했구요 이게 실행되는지 확인을 하기 위해서요 ^^
이상 제가 했는거랑 에러가 뜨는걸 적어놨습니다...잘몰라서 그러니까 리눅스//유닉스 고수님들 꼭 좋은 조언 부탁드립니다
main.o : io.h main.c 가
main.o : io.h main.c 가 아니라,
main.o : stdio.h main.c 아닌가요?
오류 메시지는 현재 경로에서 stdio.h 파일을 못찾았기 때문에 나온 겁니다.
makefile 은 '의존성 정의 언어'라고 보시면 됩니다. 이런 개념하에서 메뉴얼들을 읽어보시기 바랍니다.
위 경우에 대해 설명 드리면, '콜론 : 의 좌측은 우측에 의존적이다.' 라서 해석하시면 되고, 그래서 우측이 변경되면 좌측을 갱신하기 위해 주어진 명령을 수행합니다. 예를 들어
는 stdio.h 또는 main.c 가 변경되면 main.o 를 갱신하기 위해 gcc -c main.c 를 실행합니다.
make 유틸리티는 makefile 내에 기술된 이러한 의존성의 hierarchy 를 최 하단까지 추적합니다. 그러므로 위 예의 경우는 stdio.h 또는 main.c 에 대한 의존성이 더 있는지 판단합니다. 의존성이 없다면 stdio.h 나 main.c 가 변경되었는지 판단합니다. 변경되었는지 판단하려면 당연히 그 파일이 존재해야겠지요.
작성자분께서 제시하신 예에는 위 두 파일에 대한 의존성은 더 이상 없습니다. 그리고 현재 디렉토리에서 stdio.h 파일을 찾을 수도 없었기 때문에 지금과 같이 `stdio.h'를 만들 규칙이 없습니다 와 같은 메시지를 내보내는 것입니다.
그런데 실수 없이 올리신 거라면 main.o : io.h main.c 같은 의존성 규칙에서 그런 오류메시지가 make 유틸리티로 부터 나왔다는 것에 대해서는 잘 모르겠습니다.
그리고 지금 같은 상태이고, main.c 에도 main 함수가 있다면, 최종 빌드 후에 링커가 'main' 에 대해 duplicated symbol 오류를 낼 것 같군요...
Orion Project : http://orionids.org
좋은 정보 감사합니다~ ^^ 덕분에 풀렸네요
main문 안에 stdio.h를 선언 해주고 makefile안에도 해주니까 안되네요 ㅋ
다시 수정하고 main문이랑 다른것들을 수정해서 하니까 되더라구요...이거 makefile의 의존성을 이해 잘못했는데 프로그램안에 함수랑
비슷한 개념인걸 이제야 알겠습니다 ^^
/*다른분이 사용하는 문구를 따서 왔습니다*/
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기