2016-07-28 15 views
0

私は単純なMakefileを持っています。私が依存関係のリストで変数を使用していないときはうまく動作します。それ以外の場合は、休閑エラーを与える:私はMakefile依存関係変数

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

を行うとき、私は明示的にこのファイルのルールを追加する場合altough

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

はさらにので値が正しく設定されています

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

に見えます問題は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 

をここでソースのMakefileです:

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

良い点。エディタが保存時に末尾の空白を取り除くので、私はそのような問題は一度もありませんでした。 –

関連する問題