Искам да компилирам много изходни файлове и да изградя библиотека от тях.
Моят фиш изглежда приблизително по следния начин:
SOURCES := /home/test/src/*.c
OBJECTS := $(SOURCES:.c=.o)
.PHONY: compileLibrary
compileLibrary:
$(CC) -fPIC -c $(SOURCES) -o $(OBJECTS)
$(CC) -shared -o libshared.so $(OBJECTS)
Въпреки че процесът не се повтаря над всеки изходен файл, изглежда че makefile не замества * in SOURCES
по своята стойност.
Отговори:
4 за отговор № 1*.c
, сам по себе си, не се разширява, трябва да използватеwildcard
функция (като$(wildcard *.c)
)- то е
*.c
, не*.c
.е бягство и Премахва специално значението на
*
. - Очевидно вашият makefile не трябва да съдържа абсолютна пътека. Обикновено текущата директория трябва да бъде тази, в която е в makefile, така че да се възползвате от нея.
Всъщност трябва да използвате характеристиките на марката:
libshared.so: $(OBJECTS) $(CC) -shared -o $@ $< compileLibrary: libshared.so
(бележка: вероятно можете да направите това без правилото за компилиране, защото по подразбиране вероятно е достатъчно добър)