[질문] Makefile 에러

umzzi의 이미지

Quote:
"Makefile"

CFLAGS = $(COMMON_CFLAG)
DFLAGS = $(COMMON_DFLAG) -ggdb -g
INCS = -I$(MYLIB_HEADER_DIR)

LIB = -L$(MYLIB_LIB_DIR) -lMYLIBString -lSMDKScript -lSMDKDatelib

BIN = etcParser
SRCS = etcParser.c etcUtil.c
OBJS = $(SRCS:.c=.o)

all : $(BIN)

$(BIN) : $(OBJS)
$(CC) -o $@ $(CFLAGS) $(DFLAGS) $< $(LIB)

%.o : %.c
$(CC) -c $(CFLAGS) $(DFLAGS) -o $@ $< -I$(MYLIB_HEADER_DIR)

SOURCE는 etcParser.c etcUtil.c etcParser.h

:oops: etcParser.h 에 etcUtil에 있는 함수 프로토타입을 정의해놨습니다.
그런데 etcParser.c에서 etcUtil.c에 있는 함수를 호출하면 함수를 정의하지 않았다고
나옵니다. 왜 그럴까요?

Quote:
"에러 메세지"
/svc/fulip/maketest/etc/etcParser.c:85: undefined reference to `DirFileInfo1''
/svc/fulip/maketest/etc/etcParser.c:87: undefined reference to `SrcMoveFile''

pynoos의 이미지

umzzi wrote:
Quote:
"Makefile"

CFLAGS = $(COMMON_CFLAG)
DFLAGS = $(COMMON_DFLAG) -ggdb -g
INCS = -I$(MYLIB_HEADER_DIR)

LIB = -L$(MYLIB_LIB_DIR) -lMYLIBString -lSMDKScript -lSMDKDatelib

BIN = etcParser
SRCS = etcParser.c etcUtil.c
OBJS = $(SRCS:.c=.o)

all : $(BIN)

$(BIN) : $(OBJS)
$(CC) -o $@ $(CFLAGS) $(DFLAGS) $< $(LIB)

%.o : %.c
$(CC) -c $(CFLAGS) $(DFLAGS) -o $@ $< -I$(MYLIB_HEADER_DIR)

SOURCE는 etcParser.c etcUtil.c etcParser.h

:oops: etcParser.h 에 etcUtil에 있는 함수 프로토타입을 정의해놨습니다.
그런데 etcParser.c에서 etcUtil.c에 있는 함수를 호출하면 함수를 정의하지 않았다고
나옵니다. 왜 그럴까요?

Quote:
"에러 메세지"
/svc/fulip/maketest/etc/etcParser.c:85: undefined reference to `DirFileInfo1''
/svc/fulip/maketest/etc/etcParser.c:87: undefined reference to `SrcMoveFile''

정확한 것은 소스를 봐야만 알수 있지만, 위와 같은 오류는 C 에서 (C++아닌) 실제는 MACRO이며, 그 선언이 etcParser.c 에 보이지 않기 때문에, 암묵적으로 int 를 돌리는 함수로 가정하고, external symbol로 만들어 놓았다가 link시에 생기는 오류입니다.

CFLAGS에 -Wall -W 를 추가하시고, 관련된 warning을 모두 해결해 보세요.

divetou의 이미지

Quote:

"Makefile"

CFLAGS = $(COMMON_CFLAG)
DFLAGS = $(COMMON_DFLAG) -ggdb -g
INCS = -I$(MYLIB_HEADER_DIR)

LIB = -L$(MYLIB_LIB_DIR) -lMYLIBString -lSMDKScript -lSMDKDatelib

BIN = etcParser
SRCS = etcParser.c etcUtil.c
OBJS = $(SRCS:.c=.o)

all : $(BIN)

$(BIN) : $(OBJS)
$(CC) -o $@ $(CFLAGS) $(DFLAGS) $< $(LIB)

%.o : %.c
$(CC) -c $(CFLAGS) $(DFLAGS) -o $@ $< -I$(MYLIB_HEADER_DIR)

에서

$(BIN) 다음줄에
$(CC) -o $@ $(CFLAGS) $(DFLAGS) $(OBJS) $(LIB)

로 바꾸고 make 해 보세요.

$<는 최근에 갱신된 파일 하나를 가리키는 매크로인것 같습니다.

^^;

==============================
꿈꾸는소년