自动工具: Makefile.am:如果文件存在,则链接



我的 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宏观。

请参阅链接的文档。

最新更新