[Q] GNU MAKE에서 빌드는 안하고 up to date 메시지만 뜨는 문제입니다.
글쓴이: lovian / 작성시간: 금, 2006/12/15 - 10:39오전
안녕하세요.
나름대로 걸리적 거리는 문제가 있어서 질문드립니다.
제가 unix 플랫폼에서 c코드 빌드를 자주 하는 편인데, 확장자가 c가 아닌 파일들을 빌드하려고보면 꼭 문제가 발생합니다.
증상은 질문에 명시했듯이
make informix 를 실행하면,
make 'informix' is up to date 메시지가 뜨는 것입니다.
db 타겟은 DB를 Informix ESQL로 빌드하기 때문에 소스코드의 확장자가 ec 입니다.
간단히 언급하자면, ESQL -> CC의 순으로 빌드하여 ESQL이 c 파일을 만들어주고 CC가 그것을 빌드하는 형태입니다.
Makefile의 informix 타겟은
informix: make -C ./informix all
윗부분이 전부 입니다.
./informix/Makefile 은
%.c: %.ec $(C_PRE) $(C_PRE_INC) $(C_PRE_FLAG) $< %.o: %.c $(CC) -c $(DYN_CFLAGS) $(DB_INC) $< all: $(TARGET) $(TARGET): $(OBJS) $(LD) -o $(TARGET) $(OBJS) version.o $(DYN_LDFLAGS)
간략하게 위와 같습니다.
make에 좀 심오한 것이 있는지 informix 디렉토리에서 all 타겟을 빌드하면, 아무런 문제없이 빌드 됩니다.
informix의 상위 디렉토리에서 make -C ./informix all 로 빌드해도 빌드가 잘 됩니다.
make의 파라미터를 살펴보기는 했습니다만, 이 상황을 타계할 만한 것을 찾지 못하였습니다.
혹시, 소스의 갱신상태를 검사하지 않고 무조건 빌드하는 방법같은 것 없을까요?
조언좀 부탁드리겠습니다.
아, 참고로 MAKE의 버젼은 3.81이며 플랫폼은 Solaris 5.9입니다.
Forums:
위 내용만으로
위 내용만으로 추측해보면 현재 디렉토리에 infomix 라는 디렉토리가 존재합니다.
따라서 make 명령은 infomix라는 파일이나 디렉토리가 존재하는지 체크하는 단계에서
이미 해당 디렉토리가 존재하므로 build과정을 수행하지 않습니다.
이런 문제를 해결하는 방법은 여러가지가 있지만
다음과 같이 dummy 타켓을 추가하는 방법도 있습니다.
알려주신 방법으로
알려주신 방법으로 해결하였습니다.
단순히 디렉토리의 유무로 빌드할지 안할지를 결정할 줄은 몰랐습니다.
make 속의 make를 사용할 때에 뭔가 다른점이 있는건지 한번 조사해봐야겠군요.
감사합니다 :)
-----------------
한글을 사랑합니다.
-----------------
한글을 사랑합니다.
댓글 달기