чтение / запись файла через makefile - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня есть makefile1 , который вызывает другой makefile2 для компиляции проекта.Я устанавливаю некоторые определения C в одном из моих файлов .c в проекте, и они передаются через переменную make GLOBAL_DEFINES (в makefile2), которая расширяется до '-D…' при вызове компилятора.Я передаю значения тем, которые C определяет в качестве аргумента для makefile1 (make param1 = XX param2 = YY), хотя это работает хорошо, но когда я не предоставляю эти параметры и запускаю только make , компиляция завершается неудачножаловаться param1 = и param2 = не определены .Любая идея, как с этим справиться.

Вот моя настоящая команда, которая работает

make FW_VERSION_MAJOR = 33 FW_VERSION_MINOR = 4

Что я хочуВот что я могу сделать: у меня должна быть возможность запустить make, make param1 = XX и успешно выполнить param2 = YY. Один из подходов состоит в том, чтобы записать эти #defines в тестовый файл, чтобы при запуске make без параметров он получал значение param1 иparam2 из файла, и если я применяю параметры, они перезаписывают их в файле.Это лучший способ справиться с этим?Если да, может ли кто-нибудь направить меня в правильном направлении.

make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать оператор назначения условных переменных (он немного скрыт в gnu make doc) в вашем первом файле Makefile:

FW_VERSION_MAJOR ?= x.x.x

Таким образом, если FW_VERSION_MAJOR неопределенный (в соответствии с вашим назначением в командной строке), он получит значение по умолчанию, и ваша компиляция будет продолжена.

Имеет возможность не требовать изменений или дополнений к вашему исходному коду.

...