2016-07-07 2 views
0

다음 메이크 고려 .o 인 파일에 대한 순환 종속성 설명 : a.v.oa.v에 따라 달라 이유메이크 :

$ rm -f a.vo a.glob; make -j2 
make: Circular a.v.o <- a.v dependency dropped. 
touch a.glob a.vo 

내가 볼 수 있지만, I : 내가 make -j2을 실행하면

all : a.vo a.glob 

a.gl%b a.v% : a.v 
    touch a.glob a.vo 

를, 내가 얻을 a.va.v.o에 의존하는 방법을 모르겠다. 이 의존성은 어디서 왔는가? (그리고 그것을 없애는 방법이 있는가?)

답변

1

규칙이 정의되지 않은 경우 GNU make는 Implicit Rules을 사용합니다. 특히,

n은 C 컴파일러를 통해 링커 (일반적으로 ld라고 함)를 실행하여 n.o에서 자동으로 만들어집니다. 정확한 레시피는 '$ (CC) $ (LDFLAGS) n.o $ (LOADLIBES) $ (LDLIBS)'입니다.

~ $ cat Makefile 
all: a.v 
     echo "foo" 
a.v.o: 
     echo "bar" 
~ $ make 
echo "bar" 
bar 
cc a.v.o -o a.v 
gcc: error: a.v.o: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
<builtin>: recipe for target 'a.v' failed 
make: *** [a.v] Error 1 

cc 실행 : 당신이 볼 수 있듯이

.

+0

그리고 http://stackoverflow.com/a/4126617/377022에 따르면이 기능을 비활성화하는 방법은'.SUFFIXES :' –