2016-11-10 2 views
0

Я пытаюсь создать привязки с помощью SWIG и автоматического списка входных файлов. Но, видимо, он не работает (make просто говорит, что ничего не нужно делать для целевых «привязок»). Ручной вызов сделать как make whatever.i работает по назначению.Создание привязок с автоматическим списком файлов?

У меня есть следующий Makefile.am сейчас:

bin_PROGRAMS = ptpcapture2 
ptpcapture2_SOURCES = *.scm 
BINDSRCS = *.i 
BINDSCMS = $(BINDSRCS:.i=.scm) 

.i.scm: 
    $(SWIG) -chicken -addextern $< 

.scm.c: bindings 
    $(CSC) -t -c $< 

bindings: $(BINDSCMS) 

Что я пропустил или не так?

ответ

2

Если вы собираетесь использовать правило суффиксов, вы должны add any new suffixes в список известных суффиксов через .SUFFIXES специальной цели:

.SUFFIXES: .i .scm 

Это проще всего использовать шаблон правила вместо:

%.scm : %.i 
     $(SWIG) -chicken -addextern $< 

%.c : %.scm bindings 
     $(CSC) -t -c $< 

Но реальная проблема здесь состоит в том, что вы должны быть четко о ваших групповых символов, например:

ptpcapture2_SOURCES := $(wildcard *.scm) 
BINDSRCS := $(wildcard *.i) 

Почему это? Поскольку при назначении переменной расширение не расширяется, оно расширяется только при выполнении правила. Это означает, что эта строка:

BINDSCMS = $(BINDSRCS:.i=.scm) 

наборы BINDSCMS в строку *.scm потому BINDSRCS не расширена, это еще только символьная строка *.i.

Почему это так плохо? Потому что тогда, когда делают это видит:

bindings: *.scm 

пытается расширить подстановочные *.scm ... но ни один из этих файлов еще не были созданы, и поэтому они не существуют, и это расширяется без файлов и т.д. до тех пор, пока существует цель bindings, не нужно ничего делать, чтобы восстановить его (у него нет предпосылок).

Смежные вопросы