#makefile
Вопрос:
Я попытался добавить правило в файл Makefile.inc, который вызывается основным файлом Makefile.
aarch64/shared/bootcode.s: aarch64/shared/bootcode.S
gcc -E -DNSG1 $^ > $@
Но когда он выполняется, он работает так.
cc -E aarch64/shared/bootcode.S > aarch64/shared/bootcode.s
Почему gcc
меняется cc
и почему -DNSG1
исчезает?
Комментарии:
1. Что заставляет вас думать, что это правило выполняется?
2. @Бета-версия, потому что после того, как я «коснусь» загрузочного кода. Файл S, когда я выполняю команду, команда печатается, и файл bootcode.s создается заново. Я это вижу.
3. Что означает @Beta, так это, как вы думаете, почему выполняется ЭТО правило? Конечно, какое-то правило выполняется. Но поскольку рецепт, печатаемый make, не является рецептом для этого правила, довольно ясно, что make выполняет какое-то ДРУГОЕ правило, а не это. В частности, правило предназначено для цели
aarch64/shared/bootcode.s
, которая не является целью в вашем правиле. Таким образом, вам придется выяснить, гдеaarch64/shared/bootcode.s
запрашивается ваш файл makefile, и вместо этого изменить его на нужный вам целевой файл.4. Короткий ответ: здесь недостаточно информации, чтобы помочь вам. Вы указали только правило, которое хотите выполнить, но важно не это правило, а правило, в котором эта цель указана в качестве предварительного условия. Если вы не можете понять это, я рекомендую использовать
make -d
и/илиmake --trace
посмотреть, что происходит.5. @MadScientist да, ты прав. Определенно
cc -E
, команда не из какого-либо файла Makefile, который я использую, и она исходит из более высокого неявного правила. Проблема в том, что я хочу передать определенную переменную сcc -E
таким образом, чтобы часть кода сборки была выбрана во время предварительной обработки. И переменная, которую я хочу передать, используя аргумент команды make. Пожалуйста, посоветуйте мне, если вы знаете хороший метод.