我的 Makefile.am 创建可执行文件main:"symplerTest"我想链接文件"geometry/source/*.o"。目前我像这样链接它:
symplerTest_LDFLAGS =
...
geometry/source/*.o
这行得通。但是现在在下一步中,我只想在文件 *.o 存在时才链接。我试过这个:
if ("$(wildcard $(geometry/source/*.o))","")
symplerTest_LDFLAGS += geometry/source/*.o
endif
但收到以下错误消息:
srcUnittest/Makefile.am:81: error: endif without if
srcUnittest/Makefile.am:79: warning: wildcard $(geometry/source/*.o: non-POSIX variable name
srcUnittest/Makefile.am:79: (probably a GNU make extension)
问题似乎出在("$(通配符 $(几何/源/*.o)",")
谢谢!
您将 Automake 指令if
与 Make 混淆了 指令ifeq
,
20 个条件的自动制作手册 强调:
自动制作支持简单类型的条件。
这些条件与 GNU Make 中的条件不同。自动制作 条件在配置时由配置脚本检查,并影响 从 Makefile.in 到Makefile的翻译。它们基于传递的选项 配置和配置已发现的有关主机系统的结果。 GNU Make 条件在 make 时被检查,并且基于变量 传递给 make 程序或在生成文件中定义。
if
根本不是 Make 指令。ifeq
是有效的 Make 指令 参数的形式可以是(arg1, arg2)
。
ifeq (arg1, arg2)
表示,如果arg1
等于arg2
,则为制造。
(arg1, arg2)
格式的参数对于 Automake 指令if
无效。 Automakeif
指令的有效参数是 Automake 条件名称, 例如
if DEBUG
表示,如果DEBUG
指定的条件为真,则自动生成 - 其中DEBUG
是之前通过 Means 创建的条件名称 的AM_CONDITIONAL
宏观。
请参阅链接的文档。