기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
Makefile
all:test
CC = arm-linux-gcc
CFLAGS += -Wall -lpthread
OBJS = test1.o
OBJS += test2.o
test:$(OBJS)
$(CC) -o $@ $^ $(CFLAGS)
clean :
rm -f $(OBJS) test
이렇게 구성이 되어 있는데요
스크립트가 위에서부터 아래로 실행되기때문에
all:test에서 test:$(OBJS)로 이동하여 두개의 c파일을 옵션의 설정에 맞게 컴파일 하게 됩니다
두개의 파일이 컴파일될때 test1.c 부터 컴파일이 되는게 맞는거죠?(위에서 아래로)
두개가 순차적으로 컴파일될때 $@에 의해서 test1.c가 컴파일되면서 test가 만들어지고
test2.c가 컴파일될때도 test가 만들어지는데 +=에 의해서 합쳐지는건가요?
test:$(OBJS)에 의해서 두개의 .o 파일을 만들고 링킹과정을 거쳐서 최종실행 파일인 test가 생성된다
옵션에서 -lpthread가 있는것은 두 소스파일이 pthread를 사용하기때문에 옵션으로 넣어준것이다
전체 해석한 부분이 맞는건가요?
$(CC) -o $@ $^ $(CFLAGS) <--- 풀어서 쓰면
arm-linux-gcc -o test test1.o test2.o -Wall -lpthread 이렇게 되는건가요?
일단 아래의 링크를 참고하시고..
http://www.viper.pe.kr/docs/make-ko/make-ko_10.html#SEC97
해석하신 부분은 맞습니다. 다만..
*.c -> *.o 로 컴파일해주는 (확장자 규칙이라고 일컬어지는)내용이 빠져 있는듯 싶기도 합니다.
아니면 다른 Makefile에서 이미 *.c -> *.o 를 처리했을지도.