У меня большой проект, и он по требованию компилируется на нескольких разных машинах с разными ОС. Одна из целей имеет foo.res
в своих зависимостях. Этот файл ресурсов может быть скомпилирован с использованием одного из двух разных правил:
Первое правило требует наличия текстового файла foo.txt
. Это правило также требует, чтобы в системе было установлено не кроссплатформенное программное обеспечение. Это правило не может использоваться нашими инженерами в полевых условиях, так как оно не работает под старой MacOS.
Второе правило использует предварительно скомпилированный файл ресурсов foo.res
в каталоге ресурсов и просто копирует его в build/
. Очевидно, что это нежелательный обходной путь, но у меня нет другого выбора.
Я пытался описать 2 правила в одном файле Makefile, но у меня есть такая ошибка:
Makefile:78: warning: overriding recipe for target 'build/foo.res'
Makefile:75: warning: ignoring old recipe for target 'build/foo.res'
В настоящее время Я использую Makefile с одним из закомментированных правил:
.PHONY: compile
build/app.bin: some_files... build/foo.res
(Here is compiler call)
build/:
-mkdir build/
.PHONY: clear
clear:
-rm -rf ./build
... Lots of stuff here ...
# build/foo.res: res/foo.res | build/.
# cp res/foo.res build/foo.res
build/foo.res: res/foo.txt | build/.
some_app -o build/foo.res res/foo.txt
Я развертываю скомпилированный res/foo.res
на некоторых машинах, а затем меняю закомментированные правила, поэтому используется обычный cp
. Это работает нормально, пока в Makefile не внесены некоторые изменения в некоторых коммитах. Затем он блокирует ускоренное обновление в git.
Как настроить make для запуска только одного из правил, основанных на сопоставленных зависимостях?