2011-11-28 3 views
3

나는 make 파일을 작성했습니다.프리 프로세서 정의에 파일 민감도 만들기

내가 사용하는 make 파일에서 EXTRAFLAGS와 같은 변수를 사용했습니다.

EXTRAFLAGS += -D _MSC_VER 
EXTRAFLAGS += -D BINARYINPUT 
EXTRAFLAGS += -D ENABLEVERSION2D2 

는 또한, 나는 컴파일러 플래그

CFLAGS = -Werror -Wall -I $(INC) $(EXTRAFLAGS) 

내가 어떤 문제가 밖으로이 메이크 파일을 사용하고

mingw32-gcc $(CFLAGS) -o nameofexe OBJ's 

를 사용합니다. 하지만 전 처리기 정의를 사용하지 않을 때 EXTRAFLAGS의 문장 중 하나 앞에 '#'을 넣고 다시 작성하면 대상이 최신으로 업데이트됩니다. 프리 프로세서 정의를 중요한 목록에 추가 할 수 없습니다.

임시 작업은 현재 내가 사용하고있는 가짜 대상을 소개하고 모든 객체 파일을 제거하고 모든 것을 다시 컴파일합니다. 그러나 이것은 시간 낭비입니다. 현재 시나리오를 더 잘 관리하려면 어떻게해야합니까?

+0

'EXTRAFLAGS'를 변경하면 파일이 다시 빌드되지 않는다는 것을 의미합니까? –

+0

예, 여분의 플래그를 변경하면 다시 작성되지 않습니다 – Ram

답변

3

때 하나의 프로젝트의 파일이 변경됩니다.

예. .h 파일을 변경하면 변경 사항을 인식하고 이에 의존하는 모든 파일을 다시 빌드 한 다음 새 빌드에 따라 달라지는 모든 파일을 다시 빌드합니다 ...

그러나 컴파일러 플래그 및/또는 정의를 변경할 때 makefile에서 프로젝트 입력 파일이 변경되지 않으므로 프로젝트가 다시 작성되지 않습니다.

원하는 것을 얻기위한 세 가지 방법이 있습니다. 먼저 makefile을 변경 한 후 make clean을 수동으로 실행하십시오. 둘째 makefile 자체에 makefile 자체를 포함시키는 것 (그리고 변경시 make clean을 실행). 그리고 마지막으로 정의를 프로젝트 특정 .h 파일로 옮깁니다.

"소스 파일이 실제로 변경된 내용을 참조하고 있음을 알지 못하기 때문에 일반적으로"인하 "파일 만이 유일한 것입니다. 정의합니다.

+0

첫 번째 방법은 현재 내가하고있는 일입니다.세 번째는 사용자가 소스를 전혀 건드리지 않기를 바라기 때문에 내가 원하지 않는 것입니다. 출처의 저자가 그것에 대해 걱정하게하십시오. 내 메이크 파일의 이름을 내 개체 파일과 함께 감도 목록에 추가했습니다. 이렇게하면 문제가 해결됩니다. 내가 말한 두 번째 방법은 내가 한 것과 다른 것입니까? – Ram

+0

@ram : 예. 정확하게 두 번째 방법입니다. – flolo

4

.o 파일을 메이크 파일 자체의 Makefile에 종속시키지 않았습니다. 당신이 .c 파일을 편집 할 때와는 달리

당신은을 만들어이 문제를 간단하게 해결할 수 있습니다 -

당신이/아웃 메이크에서, 당신은 .o 인 파일에 따라 아무 것도 변경하지 않는 물건을 언급

.o 또는 .c 파일의 Makefile 자체를 포함하는 종속성. 그리고 Makefile의 내용을 모두 업데이트하면 모든 소스가 다시 컴파일됩니다.

예 :

SRC=a.c b.c 
    OBJS=a.o b.o 
    EXE=ab 

    $(EXE): $(OBJS) 
     gcc -o $(EXE) $(OBJS) $(...anything-else...) 

    $(OBJS): $(SRC) Makefile 

(이제이 .c와 .o 인 목록을 생성하는 더 나은 방법이 있습니다,하지만 위의 예 충분합니다) 만들기 프로젝트가 새 컴파일 도구입니다

+0

예. 이것은 정확하게 내가해야만했던 것이었다. obj 파일과 함께 민감도 목록에 makefile을 도입하십시오. 도와 주셔서 감사합니다. – Ram

관련 문제