Мой 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)
Кажется, проблема в («$ (подстановочный знак $ (geometry / source / *. O))», «»)
Спасибо!
Вы путаете директиву Automake if
с маркой
директива ifeq
,
Руководство Automake на 20 условных
подчеркивает:
Automake поддерживает простой тип условных выражений.
Эти условия не совпадают с условиями в GNU Make. Automake
условия проверяются во время настройки скриптом настройки и влияют
перевод с Makefile.in на Makefile. Они основаны на переданных опциях
настроить и на результаты, которые настроил обнаружил о хост-системе.
Условия GNU Make проверяются во время создания и основаны на переменных
передается программе make или определяется в файле Makefile.
if
это не директива Make вообще. ifeq
директива Make, для которой действительно
аргументы могут иметь форму (arg1, arg2)
,
ifeq (arg1, arg2)
значит, сделать, если arg1
равно arg2
,
Аргументы формы (arg1, arg2)
недопустимы для директивы Automake if
,
Допустимые аргументы для Automake if
директивой являются имена условий Automake,
например
if DEBUG
значит, чтобы сделать, если условие названо DEBUG
правда — где
DEBUG
это имя условия, которое вы ранее создали с помощью
из AM_CONDITIONAL
макро.
Обратитесь к связанной документации.
Других решений пока нет …