【问题标题】:Makefile dependencies variableMakefile 依赖变量
【发布时间】:2016-07-28 10:34:12
【问题描述】:

我有一个简单的 Makefile。当我不在依赖项列表中使用变量时,它工作正常。否则会出现错误:

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

所以值设置正确,尽管我明确为此文件添加规则:

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

看起来问题出在 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 $@ $^



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


    clean:
        rm -rf $(EXTOBJS)

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

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


    .PHONY: clean dirs

我正在使用 GNU Make 4.1

【问题讨论】:

  • 查看用make print-LED-RGB-SRC打印的值。它说../LED/source/src/,而不是../led-cfg/src/。在某处打错字?
  • 对不起,我打印了不同的变量。

标签: makefile gnu-make


【解决方案1】:

在黑暗中拍摄。至少在您发布的Makefile 列表中,LED-CFG-SRC 变量的定义中有多余的不需要的空格:

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

这意味着,稍后在规则定义中扩展变量时,make 将看到 ../led-cfg/src/ %.cc(两个词,$&lt; = ../led-cfg/src/,而 %.cc 仅作为附加依赖项)预期的../led-cfg/src/%.cc

您应该在编辑器中激活不可打印字符的显示,因为make 在某些地方对空格非常挑剔:它选择自动去除一些空格,但保留一些空格。就像这里:make 已经在../led-cfg/src/ 前面删除了空格,但它保留了末尾的那个。

【讨论】:

  • 好地方。我从来没有遇到过这样的问题,因为我的编辑器在保存时去掉了尾随空格。
  • 这只是用定义为 VAR := &lt;blah&gt; # Description of var 的 var 咬我。永远不会猜到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2017-10-03
  • 2012-03-23
  • 2023-03-13
相关资源
最近更新 更多