autotools:Makefile.am:如果文件存在则链接

时间:2017-05-19 14:10:06

标签: c++ makefile autotools automake ldflags

我的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))","")

谢谢!

1 个答案:

答案 0 :(得分:0)

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

20 Conditionals上的Automake手册 强调:

  

Automake支持一种简单的条件。

     

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

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

ifeq (arg1, arg2)

表示要创建,如果 arg1 等于 arg2

表单(arg1, arg2)的参数对Automake指令if无效。 Automake if指令的有效参数是Automake条件名称, e.g。

if DEBUG

表示,对于Automake,如果 DEBUG 指定的条件为真 - 其中 DEBUG是您之前通过方式创建的条件名称 的AM_CONDITIONAL 宏。

请参阅链接文档。