У меня файл structre какMakefile не собирание зависимостей, когда в переменной
/
|- Makefile
|- libs
|- lib1
|- lib2
|- src
|- file.cpp
У меня есть один Makefile верхнего уровня, который включает в себя Rules.mk файл в каждом подкаталоге. Правило файла src зависит от lib1 и lib2, которые также создаются в make-файле.
теперь у меня есть цель, как:
# predefined rule
COMP := gcc -o [email protected] $< $(FLAGS)
file.o: OBJS := libs/lib1/lib1.o libs/lib2/lib2.o
file.o: file.cpp $(OBJS)
$(COMP) $(OBJS)
при создании материала (цель по умолчанию file.o) жалуется на библиотеки не там. Когда я добавляю эхо в задачу file.o и распечатываю $(OBJS)
, он распечатывает все библиотеки, которые я ему назначил, но make не вызывает их создание.
Когда я заменяю переменную $ (OBJS) в зависимостях с именами файлов, она запускает сборки и, очевидно, находит необходимые библиотеки.
Я думал, что это может иметь какое-то отношение к .SECONDARYEXPANSION, но это не должно быть, поскольку я не использую задержанные переменные.
Заранее благодарен!
С уважением Крис
PS: проект находится на Github в любом случае, следующий файл содержит правила я говорю: https://github.com/janhancic/CHIC/blob/242c0ceee558c2eb4b21fe73e94a9ab5f3fe0b49/src/Rules.mk
Спасибо большое, что все объясняет! :) Вчера я смотрел страницу руководства около 2 часов, но не видел этого ... возможно, было слишком поздно, чтобы сосредоточиться Да, это то, что я сделал, чтобы обойти это, но я установил TGT для связи, и я также хочу, чтобы задача зависела от нее, поэтому я хотел использовать целевую специфическую переменную в зависимостях, а также – deadc0de
Страница руководства - это просто краткое справочное руководство.Он не содержит всего, что нужно знать об использовании GNU make: это было бы слишком долго. Вы должны посмотреть руководство пользователя GNU. Это должно быть доступно вам, где бы вы ни находили программу make, или вы можете прочитать ее в Интернете http://www.gnu.org/software/make/manual/. Обратите внимание, что онлайн-версия предназначена для последней версии; там могут быть зафиксированы там, что ваша версия не поддерживает, если она старше. – MadScientist
Я боюсь, что я не понимаю, что вы подразумеваете под «установить целевую переменную для привязки, и я также хочу, чтобы задача зависела от нее»; можете ли вы изменить свой вопрос, чтобы показать пример этого? Поскольку полный набор предварительных условий доступен для рецепта с использованием автоматических переменных: вам не нужно назначать переменную отдельно для них. Но, возможно, я просто не понимаю. Однако мы можем только предложить решения вопросов, которые действительно заданы :-). – MadScientist