2017-04-25 3 views
1

가 여기 내 메이크의 단순화 된 버전의 부모를 무효화하지 않습니다 위에서 언급 한메이크 : 규칙이없는 종속성

all: myprogram 

myprogram: main.o 
    c++ main.o -o myprogram 

main.o: main.cpp mylib.hpp 
    c++ -c main.cpp 

mylib.hpp: mylib.inl 

이러한 모든 파일은 실제 파일입니다. mylib.hpp을 변경하면 main.cpp가 다시 컴파일됩니다. 그러나, 내 문제는 내가 mylib.inl을 변경하면 이 아닌가 재 컴파일된다는 것입니다. mylib.inl을 편집 할 때 main.o 대상을 무효화하려면 어떻게해야합니까? myprogram 대상을 무효화하려면 어떻게해야합니까? 내가 mylib.inl을 편집 할 때마다 매번 모든 것을 다시 컴파일하고 싶지 않기 때문에 이 아닌 .PHONY 대상을 사용하는 것이 더 낫습니다.

mylib.hpp: mylib.inl 

실제 의존성을 설명하지 않습니다

+0

흠 아마도 mylib.hpp를 터치하거나'main.o : main.cpp mylib.hpp mylib.inl'에'mylib.hpp'을 입력하십시오. – chux

답변

4

귀하의 문제는 메이크에 설명 된 의존성이 있다는 것입니다. mylib.inl을 변경하더라도 mylib.hpp은 변경되지 않습니다 (이러한 변경을 트리거하는 규칙은 없음).

main.o: main.cpp mylib.hpp mylib.inl 

수동 인 경향이 오류가 될 가능성이 높습니다 개별 종속성을 유지 : mylib.inlmylib.hpp에서 포함되어

경우 실제로이 같은 의존성에 이르는 아니라 mylib.hpp보다 main.o에 의존성해야 왜 대부분의 컴파일러가 make 파일에서 포함 할 수있는 의존성 파일을 자동 생성 할 수있는 기능을 제공하는지. 그런 다음 더 일반적인 컴파일 규칙을 제공 할 수 있습니다. 이것을 사용하는 방법에 대한 자세한 내용은 this article을 확인하십시오.

+0

Dang it, 나는 그것을 두려워했습니다. 하지만 대답 주셔서 감사합니다! – Jerfov2