/ / Makefile не се повтаря над всички изходни файлове? - c, makefile, споделени библиотеки

Makefile не се повтаря над всички изходни файлове? - c, makefile, споделени библиотеки

Искам да компилирам много изходни файлове и да изградя библиотека от тях.

Моят фиш изглежда приблизително по следния начин:

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
  1. *.c, сам по себе си, не се разширява, трябва да използвате wildcard функция (като $(wildcard *.c))
  2. то е *.c, не *.c. е бягство и Премахва специално значението на *.
  3. Очевидно вашият makefile не трябва да съдържа абсолютна пътека. Обикновено текущата директория трябва да бъде тази, в която е в makefile, така че да се възползвате от нея.
  4. Всъщност трябва да използвате характеристиките на марката:

    libshared.so: $(OBJECTS)
    $(CC) -shared -o $@ $<
    compileLibrary: libshared.so
    

    (бележка: вероятно можете да направите това без правилото за компилиране, защото по подразбиране вероятно е достатъчно добър)