Ссылка на код, определенный в коде C, внутри его make-файла - PullRequest
1 голос
/ 18 июня 2019

Я пишу некоторые встроенные прошивки, используя C с arm-gcc и Eclipse.В моем коде номер версии FW, определенный как макрос.Я хочу, чтобы эта версия автоматически добавлялась к целевому файлу сборки.

Для примера, скажем, это мой файл main.h:

#ifndef MAIN_H__
#define MAIN_H__

#define FW_MAJOR_VERSION   1
#define FW_MINOR_VERSION   0

и make-файл:

TARGET     := fw_release
OUTPUT_DIR := out
...
generate_pkg:
   @gen_pkg $(OUTPUT_DIR)/$(TARGET)_pkg.zip

, где gen_pkg - некоторый сценарий для создания пакета обновления прошивки.

Это приведет к созданию пути к файлу, например: out/fw_release_pkg.zip

В идеале, яхотелось бы что-то вроде этого:

generate_pkg:
   @gen_pkg $(OUTPUT_DIR)/$(TARGET)_pkg_v$(FW_MAJOR_VERSION).$(FW_MINOR_VERSION).zip

, который будет генерировать путь к файлу следующим образом: out/fw_release_pkg_v1.0.zip

Теперь я знаю, что могу определить версию в make-файле и ссылаться на нее в коде(в основном наоборот), но это имеет 2 проблемы:

  1. Каждый раз, когда я изменяю make-файл, он запускает компиляцию всего кода, которая занимает несколько минут.

  2. У меня есть две отдельные конфигурации сборки (выпуск и отладка), каждая из которых использует свой собственный make-файл, и для этого мне потребуется обновить их по отдельности.

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Подход, который я выбрал бы, состоял в том, чтобы определить элементы номера версии в Makefile и записать их в свой код, используя cflags.

В Makefile:

FW_VERSION_MAJOR=1
FW_VERSION_MINOR=1
FW_VERSION_MICRO=0a

FW_VERSION = $(FW_VERSION_MAJOR).$(FW_VERSION_MINOR).$(FW_VERSION_MICRO)

CFLAGS += -DFW_VERSION_MAJOR=$(FW_VERSION_MAJOR)
CFLAGS += -DFW_VERSION_MINOR=$(FW_VERSION_MINOR)
CFLAGS += -DFW_VERSION_MICRO=$(FW_VERSION_MICRO)

debug_build:
    $(CC) -DDEBUG=1 $(OBJECTS) -o $(OUTPUT)

release_build:
    $(CC) -DDEBUG=0 $(OBJECTS) -o $(OUTPUT)

Тогда довольно просто записать правильную версию в отладочное и не отладочное поколение pkg - и вам нужно всего лишь изменить информацию о версии прошивки в одном месте.

0 голосов
/ 18 июня 2019

Ну, вам придется разобрать main.h так или иначе.

Предполагается, что вы используете gcc или clang:

generate_pkg:   main.h
        @gen_pkg "$(OUTPUT_DIR)/$$(echo FW_MAJOR_VERSION/FW_MINOR_VERSION | $(CC) -P -E -include main.h -x c -)_pkg.zip"

Если ваш main.h сложнее этого, вам нужно будет добавить все свои $(CFLAGS) и другие параметры по умолчанию к команде $(CC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...