我目前正在尝试从源代码构建一个程序。我已经走了很长一段路,但我失败了,并显示消息“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)
但这只是草稿。我会添加你的帮助。
“缺少分隔符”是
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
你当然也可以将添加的定义放入一行,或者用反斜杠连接行,但我发现
+=
语法更容易处理,特别是在添加和删除事物、使事物成为条件时以及处理时差异和补丁。