Рецепт Makefile изменен (gcc на cc, и опция-D исчезает)

#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. Пожалуйста, посоветуйте мне, если вы знаете хороший метод.