将新源文件添加到lwip-tap的依赖项存在问题

时间:2019-05-08 14:22:02

标签: makefile lwip

我正在尝试向lwip-tap(https://github.com/takayuki/lwip-tap)添加一个新的源文件,但是执行时遇到一些问题

$ make

我正在遵循其他示例代码的实现方式。我正在创建一个具有与udp示例相同功能的“ test.h”和“ test.c”(更改功能名称以避免冲突)。

然后我在makefile中添加依赖项,就像我看到添加了其他依赖项一样:

第一个 -Ilwip-contrib / apps / test

  srcdir = @srcdir@
  prefix = @prefix@
  exec_prefix = $(prefix)
  bindir = $(exec_prefix)/bin
  sbindir = $(exec_prefix)/sbin
  libexecdir = $(exec_prefix)/libexec
  datadir = $(prefix)/share

  IP_VERSION = 4
  CC = @CC@
  CPPFLAGS = @DEFS@ -I. -Ilwip-contrib/ports/unix/include \
    -Ilwip/src/include/ipv$(IP_VERSION) -Ilwip/src/include \
    -Ilwip-contrib/apps/chargen -Ilwip-contrib/apps/httpserver \
    -Ilwip-contrib/apps/tcpecho -Ilwip-contrib/apps/udpecho -Ilwip-contrib/apps/test @CPPFLAGS@
  CFLAGS = -pthread -Wall @CFLAGS@
  LDFLAGS = -pthread @LDFLAGS@
  LIBS = @LIBS@
  INSTALL = @INSTALL@

第二 lwip-contrib / apps / test / test.c

SOURCES = \
  lwip/src/api/api_lib.c \
  lwip/src/api/api_msg.c \
  lwip/src/api/err.c \
  lwip/src/api/netbuf.c \
  lwip/src/api/netdb.c \
  lwip/src/api/netifapi.c \
  lwip/src/api/sockets.c \
  lwip/src/api/tcpip.c \
  lwip/src/core/def.c \
  lwip/src/core/dhcp.c \
  lwip/src/core/dns.c \
  lwip/src/core/init.c \
  lwip/src/core/mem.c \
  lwip/src/core/memp.c \
  lwip/src/core/netif.c \
  lwip/src/core/pbuf.c \
  lwip/src/core/raw.c \
  lwip/src/core/stats.c \
  lwip/src/core/sys.c \
  lwip/src/core/tcp.c \
  lwip/src/core/tcp_in.c \
  lwip/src/core/tcp_out.c \
  lwip/src/core/timers.c \
  lwip/src/core/udp.c \
  lwip/src/core/ipv4/autoip.c \
  lwip/src/core/ipv4/icmp.c \
  lwip/src/core/ipv4/igmp.c \
  lwip/src/core/ipv4/inet.c \
  lwip/src/core/ipv4/inet_chksum.c \
  lwip/src/core/ipv4/ip.c \
  lwip/src/core/ipv4/ip_addr.c \
  lwip/src/core/ipv4/ip_frag.c \
  lwip/src/core/snmp/asn1_dec.c \
  lwip/src/core/snmp/asn1_enc.c \
  lwip/src/core/snmp/mib2.c \
  lwip/src/core/snmp/mib_structs.c \
  lwip/src/core/snmp/msg_in.c \
  lwip/src/core/snmp/msg_out.c \
  lwip/src/netif/etharp.c \
  lwip-contrib/ports/unix/sys_arch.c \
  lwip-contrib/apps/chargen/chargen.c \
  lwip-contrib/apps/httpserver/httpserver-netconn.c \
  lwip-contrib/apps/tcpecho/tcpecho.c \
  lwip-contrib/apps/udpecho/udpecho.c \
  lwip-contrib/apps/test/test.c \
  tapif.c \
  lwip-tap.c

我没有修改makefile的最后一部分

OBJS := $(foreach f,$(SOURCES),$(notdir $(f:.c=.o)))
%.o:
    $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
.PHONY: all check-syntax depend dep clean distclean
all: lwip-tap
lwip-tap: $(OBJS)
    $(CC) $(LDFLAGS) $(LIBS) -o lwip-tap $(OBJS)
check-syntax:
    $(CC) $(CFLAGS) $(CPPFLAGS) -fsyntax-only $(CHK_SOURCES)
depend dep:
    $(CC) $(CFLAGS) $(CPPFLAGS) -MM $(SOURCES) >.depend
clean:
    rm -f config.cache config.log
    rm -f lwip-tap $(OBJS) *~
distclean: clean
    rm -f Makefile config.h config.status
    rm -rf autom4te.cache
ifeq (.depend,$(wildcard .depend))
include .depend
endif

当我执行./configure时工作正常,但是当我执行make时,我得到:

rr@ubuntu:~/Desktop/test/lwip-tap$ make
gcc -pthread -Wall -g -O2 -DHAVE_CONFIG_H -I. -Ilwip-contrib/ports/unix/include -Ilwip/src/include/ipv4 -Ilwip/src/include -Ilwip-contrib/apps/chargen -Ilwip-contrib/apps/httpserver -Ilwip-contrib/apps/tcpecho -Ilwip-contrib/apps/udpecho -Ilwip-contrib/apps/test  -c 
gcc: fatal error: no input files
compilation terminated.
Makefile:94: recipe for target 'test.o' failed
make: *** [test.o] Error 1

我想念什么吗?

编辑:

我已经意识到,如果将源添加到SOURCES变量中,它将无法像其他源一样工作。例如,如果我在此处添加源文件:

SOURCES = \
  lwip/src/api/api_lib.c \
  lwip-contrib/apps/test/test.c \

make的输出是:

gcc -pthread -Wall -g -O2 -DHAVE_CONFIG_H -I. -Ilwip-contrib/ports/unix/include -Ilwip/src/include/ipv4 -Ilwip/src/include -Ilwip-contrib/apps/chargen -Ilwip-contrib/apps/httpserver -Ilwip-contrib/apps/tcpecho -Ilwip-contrib/apps/udpecho  -c lwip/src/api/api_lib.c
gcc -pthread -Wall -g -O2 -DHAVE_CONFIG_H -I. -Ilwip-contrib/ports/unix/include -Ilwip/src/include/ipv4 -Ilwip/src/include -Ilwip-contrib/apps/chargen -Ilwip-contrib/apps/httpserver -Ilwip-contrib/apps/tcpecho -Ilwip-contrib/apps/udpecho  -c 
gcc: fatal error: no input files
compilation terminated.
Makefile:94: recipe for target 'test.o' failed
make: *** [test.o] Error 1

为什么在第一种情况下末尾添加“ lwip / src / api / api_lib.c”,而在第二种情况下却不添加“ lwip-contrib / apps / test / test.c”?

1 个答案:

答案 0 :(得分:0)

您没有在任何地方声明.o文件取决于.c文件。

此模式规则:

%.o:
        $(CC) $(CFLAGS) $(CPPFLAGS) -c $<

说您可以从零开始构建.o文件(没有先决条件),但是它使用$<自动变量,该变量扩展为第一个先决条件。必备条件必须明确定义的地方,例如:

sys_arch.o : lwip-contrib/ports/unix/sys_arch.c

但是在您的makefile中,您尚未创建那些先决条件语句,因此$<变量为空(没有先决条件)。