Вопрос

У меня есть шаблон make-файла для компиляции одной DLL (для системы плагинов). Makefile пользователя выглядит следующим образом:

EXTRA_SRCS=file1 file2
include makefile.in

В makefile.in у меня есть:

plugin.dll: plugin.os $(patsubst %,%.os,$(EXTRA_SRCS))

Где plugin.os - это основной файл C ++ для компиляции. Между прочим, окончание файлов .os - это объектные файлы, скомпилированные для разделяемой библиотеки (то есть с использованием опции -fpic с gcc)

Теперь проблема в том, что дополнительные источники, вероятно (но не обязательно) будут заголовочными файлами. В идеале я хотел бы добавить их в качестве зависимостей для цели file.cpp и <=>, но только если они существуют.

Метод должен работать как для Windows, так и для Linux, или, по крайней мере, быть адаптируемым для каждого. Однако я использую только GNU-версию make.

Это было полезно?

Решение

Используйте " подстановочный знак " Функция:

$(wildcard *.h)

РЕДАКТИРОВАТЬ: чтобы соответствовать определенному списку, выполните

$(wildcard $(HEADER_FILES))

Нет необходимости использовать $ (фильтр ...), функция подстановки автоматически фильтрует файлы, которые не существуют.

Другие советы

Вы не указали, какой компилятор (ы) вы используете, но если у вас есть доступ к gcc / g ++, вы можете использовать опцию -MM.

Я создаю файл с расширением .d для каждого файла .c или .cpp, а затем " include " .d файлы. Я использую что-то вроде этого в моем Makefile:

%.d: %.c
        gcc $(INCS) $(CFLAGS) -MM $< -MF $@

%.d: %.cpp
        g++ $(INCS) $(CXXFLAGS) -MM $< -MF $@

Затем я создаю зависимости следующим образом:

C_DEPS=$(C_SRCS:.c=.d)
CPP_DEPS=$(CPP_SRCS:.cpp=.d)
DEPS=$(C_DEPS) $(CPP_DEPS)

и это в нижней части Makefile:

include $(DEPS)

Это то поведение, за которое вы идете? Прелесть этого метода в том, что даже если вы используете компилятор не-GNU для фактической компиляции, компиляторы GNU хорошо справляются с вычислением зависимостей.

Делает ли простое

$(filter $(wildcard *.h),$(HEADER_FILES))

делай что хочешь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top