Make-Error“缺少分隔符”(大概是因为程序的变量没有正确定义)

问题描述 投票:0回答:1

我目前正在尝试从源代码构建一个程序。我已经走了很长一段路,但我失败了,并显示消息“Makefile:3360:***缺少分隔符。停止。”该行位于 automake 生成的 Makefile 中:

$(example): $(example1/src/*) $(example1/include/*)
    $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
  server

我怀疑错误在于步骤 ./autogen.sh 中的警告指示(“警告:定义了变量‘server_SOURCES’,但没有程序或库将‘server’作为规范名称(可能是拼写错误)”)。

我想在不同的可执行文件之间共享服务器,并使用 CPP 标志和源:

# server: shared between executable A and executable B
server_CPPFLAGS = $(example) $(example)
server_SOURCES = \
  init.cpp \
  main.cpp \
  And-so-on.cpp
  $(Program-name_H)

我已经尝试过变量“CPPFLAGS =”和“SOURCES”而不是“server_CPPFLAGS”和“server_SOURCES”,但没有成功。

我能做什么?

编辑:

感谢您花时间提供帮助,ndim。让该计划发挥作用对我来说很重要,因此我感谢这些建设性的投入。由于可执行文件 A 包含多个源文件和头文件,所以我今天写了如下内容:

server: shared between executable A and executable B
server_CPPFLAGS = $(example) $(example)
  init.cpp
  gcc -o server init.cpp
  main.cpp 
  gcc -o server main.cpp
$(Program-name_H)

但这只是草稿。我会添加你的帮助。

variables automake
1个回答
0
投票

“缺少分隔符”是

make
经典。引用的制作配方应该看起来像

$(example): $(example1/src/*) $(example1/include/*)
<TAB>$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
<TAB>server

带有

<TAB>
字符而不是空格,但是您的变体似乎在
server
行中有空格。

要将一组通用源文件构建为多个可执行文件,请使用如下所示的内容。要点是 NOT 使用 Automake 标准变量结尾

_SOURCES
_CPPFLAGS
等,因为 Automake 希望以自己的方式处理它们。

使用任何非 Automake 变量名称(相应 Automake 变量结尾的小写变体对我来说有意义)。

bin_PROGRAMS =


common_sources   =
common_sources  += server-file1.c server-file1.h
common_sources  += server-file2.c server-file2.h

common_cppflags  =
common_cflags    =
common_ldadd     =
common_ldflags   =

common_cppflags += $(LIBUSB_CFLAGS)
common_ldadd    += $(LIBUSB_LIBS)

common_cflags   += -save-temps=obj
common_cflags   += -Wa,[email protected]
common_ldflags  += -Wl,[email protected],--cref


bin_PROGRAMS   += prog1
prog1_SOURCES   = $(common_sources)
prog1_CPPFLAGS  = $(common_cppflags)
prog1_CFLAGS    = $(common_cflags)
prog1_LDADD     = $(common_ldadd)
prog1_LDFLAGS   = $(common_ldflags)

prog1_SOURCES  += example1/src/main.c
prog1_SOURCES  += example1/inc/main.h

prog1_SOURCES  += example1/src/cmdline.c
prog1_SOURCES  += example1/inc/cmdline.h


bin_PROGRAMS   += prog2
prog2_SOURCES   = $(common_sources)
prog2_CPPFLAGS  = $(common_cppflags)
prog2_CFLAGS    = $(common_cflags)
prog2_LDADD     = $(common_ldadd)
prog2_LDFLAGS   = $(common_ldflags)

prog2_SOURCES  += example2/src/main.c
prog2_SOURCES  += example2/inc/main.h

prog2_SOURCES  += example2/src/cmdline.c
prog2_SOURCES  += example2/inc/cmdline.h

你当然也可以将添加的定义放入一行,或者用反斜杠连接行,但我发现

+=
语法更容易处理,特别是在添加和删除事物、使事物成为条件时以及处理时差异和补丁。

© www.soinside.com 2019 - 2024. All rights reserved.