2016-07-28 5 views
0

나는 간단한 Makefile을 가지고있다. 종속성 목록에서 변수를 사용하지 않을 때는 정상적으로 작동합니다. 그렇지 않으면 fallowing 오류 제공 :Makefile 의존성 변수

ext/configXML.o: $(LED-CFG-SRC)/%.cc 
@echo 'Building file: $<' 
@${CXX} $(CXXFLAGS) -c -o "[email protected]" "$<" 

그것은 같습니다 또한

make: *** No rule to make target 'ext/configXML.o', needed by 'libledrgb-jni.so'. Stop. 

을 나는 명시 적으로이 파일에 대한 규칙을 추가하면 입력해도

make print-LED-CFG-SRC 
LED-CFG-SRC = ../led-cfg/src 

그래서 값이 제대로 설정되어 수행 할 때 문제는 소스 파일에 LED-CFG-SRC가있는 것입니다.

make ext/configXML.o 
make: *** No rule to make target '/configXML.cc', needed by 'ext/configXML.o'. Stop. 

는하지만 파일이 존재 :

make list 
ls -la ../led-cfg/src 
total 340 
drwxrwxr-x 2 gigi gigi 4096 lip 27 13:10 . 
drwxrwxr-x 12 gigi gigi 4096 lip 28 10:08 .. 
-rw-rw-r-- 1 gigi gigi 11918 lip 28 09:54 configXML.cc 
-rw-rw-r-- 1 gigi gigi 2891 lip 27 13:17 configXML.h 

여기 소스 메이크입니다 :

EXTOBJS = ext/configXML.o ext/packet.o ext/tinyxml2.o ext/crypt.o ext/rozkaz.o 
    LED-CFG-SRC := ../led-cfg/src/ 
    INCLUDES := -I$(LED-CFG-SRC) 
    CXXFLAGS := $(INCLUDES) 
    LIBRARY := libledrgb-jni.so 

    CXXFLAGS := $(INCLUDES) -fPIC -std=c++14 

    all: dirs $(LIBRARY) 

    $(LIBRARY): $(OBJFILES) $(EXTOBJS) 
     $(CXX) -shared -o [email protected] $^ 



    ext/%.o: $(LED-CFG-SRC)/%.cc 
     @echo 'Building file: $<' 
     @${CXX} $(CXXFLAGS) -c -o "[email protected]" "$<" 


    clean: 
     rm -rf $(EXTOBJS) 

    list: 
     ls -la $(LED-CFG-SRC) 

    print-% : ; @echo $* = $($*) 


    .PHONY: clean dirs 

나는 GNU는 어둠 속에서 4.1

+0

'make print-LED-RGB-SRC'로 인쇄 된 값을보십시오. '../ led-cfg/src /'가 아니라'../ LED/source/src /'라고합니다. 오타 어딘가에? – Kusalananda

+0

죄송합니다. 다른 변수를 인쇄했습니다. –

답변

1

샷을 확인 사용하고 있습니다.

의미
LED-CFG-SRC := ../led-cfg/src/<there-is-reduntant-whitespace-here> 

, 변수가 나중에 규칙 정의에 확장 될 때 make../led-cfg/src/ %.cc을 볼 것입니다 : 당신이 게시 한 나열하는 Makefile에서 최소한의 LED-CFG-SRC 변수의 정의에 중복 원치 않는 공백이있다 ($< = ../led-cfg/src/%.cc은 예상되는 ../led-cfg/src/%.cc 대신에 추가 종속성으로 만 사용됩니다.

편집기에서 인쇄 할 수없는 문자의 표시를 활성화해야합니다. make은 공백에 매우 까다롭기 때문에 일부는 자동으로 제거되지만 일부는 유지합니다. 예 : make../led-cfg/src/ 앞면에 공백을 넣었지만 끝 부분에 공백을 두었습니다.

+0

좋은 지점. 내 편집인이 후행 공백을 제거 할 때 저장 문제로 인해이 문제가 발생하지 않았습니다. –

관련 문제