-1

我的 Makefile.am 创建可执行文件 main: "symlerTest" 我想链接文件 "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)

问题似乎出在 ("$(wildcard $(geometry/source/*.o))","")

谢谢!

4

1 回答 1

0

您将 Automake 指令if与 Make 指令混淆了ifeq

20 个条件的 Automake 手册 强调:

Automake 支持简单类型的条件。

这些条件句与 GNU Make 中的条件句不同。配置脚本在配置时检查 Automake 条件,并影响从 Makefile.in 到 Makefile 的转换。它们基于传递给 configure 的选项以及 configure 发现的有关主机系统的结果。GNU Make 条件在 make 时被检查,并且基于传递给 make 程序或在 Makefile 中定义的变量。

if根本不是 Make 指令。ifeq是一个 Make 指令,其有效参数的形式可能为(arg1, arg2).

ifeq (arg1, arg2)

意思是,做,如果 arg1 等于 arg2

形式的参数对(arg1, arg2)Automake 指令无效if。Automake 指令的有效参数if是 Automake 条件名称,例如

if DEBUG

对 Automake 来说,如果由 命名的条件为 DEBUG - 其中 DEBUG是您之前通过AM_CONDITIONAL 宏创建的条件名称。

请参阅链接的文档。

于 2017-05-19T17:07:59.633 回答