Можно ли сопоставить наборы в файле make? - PullRequest
0 голосов
/ 19 октября 2011

У меня есть файл make, который использует сопоставление с образцом для автоматизации компиляции с использованием правила, подобного следующему:

%.o : %.c
    gcc -c $<

Однако в этом проекте у меня есть несколько исходных файлов, которые различаются в зависимости от их расширения.Есть ли способ сопоставления наборов в файлах make, как в регулярных выражениях.

Псевдо-пример:

%.o : %.[cC]
    gcc -c $<

Невозможно просто изменить регистр исходных файлов, поскольку он используется для тестирования модулей существующего проекта, который смешивает модули из нескольких других.

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Я нашел решение.Оказывается, у make-файла было несколько проблем.

Во-первых, пример, который я разместил, на самом деле работает, как указал Бантар.Однако моя проблема заключалась в том, что мои исходные файлы были не в корневом каталоге, а в подкаталоге src /, который я добавил в vpath.Честно говоря, я думал, что это не имеет отношения к моему вопросу, так как я полагал, что make автоматически просканирует свой vpath на наличие исходных файлов.Оказывается, vpath не применяется к проверке правил.

Чтобы заставить его работать, выполните:

vpath = %.c src
vpath = %.C src

%o : src/%.[Cc]
    gcc -c $<

Далее, когда я работал с примерами того, как это сделать, make иногда создавал исходные файлымоя спина.Если вы выполните:

all : main.o
    gcc -o test main.o

... и не имеете правила для сборки файла .o, make создаст его, используя неявные встроенные правила.Весьма запутанно.Его можно отключить с помощью флага -r.

make -r all

Третья компиляция файлов .C с использованием gcc без каких-либо дополнительных параметров приведет к ошибкам компоновщика, поскольку gcc по умолчанию интерпретирует файлы .C как файлы C ++.Для компиляции в виде файлов C используйте флаг -x.

%.o : %.C
    gcc -x c -c %<

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 19 октября 2011

Самый простой вариант, который я вижу, это просто связать несовпадающие регистры:

%.c : %.C
        ln $< $@

и позволить цепочке правил сделать остальное.

...