OBJ является постоянным, но у вас есть другая проблема:
- Сначала Makefile полностью разбирается make. И, таким образом, $ OBJ все еще не установлен / пуст на этом этапе. Следовательно, цель bin получает
main.o
в качестве зависимости, так как все переменные на этом этапе заменяются их значениями.
- Затем OBJ обновляется своим содержимым, используя указанные цели в командной строке. Но OBJ больше не используется для цели bin, так как make завершает сборку зависимостей. (Makefile обычно не анализируется второй раз)
Хитрость в том, чтобы заполнить переменную OBJ до анализа. Простое решение - вызвать Makefile, используя:
make "OBJ=x11 oss" bin
и немного измените Makefile, чтобы добавить .o
-часть (или просто добавьте их в команду make):
bin: $(patsubst %,%.o,$(OBJ)) main.o
$(CC) $(LDFLAGS) $(OBJ) main.o $(LDLIBS)
.c.o:
$(CC) $(CFLAGS) -c $<
Примечание : Я сказал: «Обычно Makefile не анализируется второй раз». можно рекурсивно использовать Makefile несколько раз. Это очень сложно и, вероятно, не требуется в 99% случаев. Примером такого «оскорбления» является OpenWRT buildsystem . trunk / Makefile является примером Makefile, который вызывается несколько раз сам по себе.