У меня есть один микроконтроллер, но несколько проектов, которые компилируются из одного и того же исходного кода.Я думаю, что мой сценарий похож на ваш, по крайней мере, в некоторой степени.Мое решение также было вдохновлено ядром Linux.
config.h
Весь исходный код, которому требуется доступ к какому-либо параметру конфигурации, просто включает файл заголовка config.h
.
config.h
состоит только из одной строки:
#include <config/project.h>
project.h
У меня есть несколько файлов заголовков конфигурации, по одному на проект.project.h
состоит из определений макросов со значениями, такими как true
, false
или константы:
#define CONFIG_FOO true
#define CONFIG_BAR false
#define CONFIG_TIME 100
check.c
Этот файл проверяет параметры конфигурации на правильность: -все параметры должны быть определены , даже если они не используются или не имеют значения для этого проекта - сигнализируются нежелательные комбинации параметров - значения параметров ограничены.
#if !defined(CONFIG_FOO)
#error CONFIG_FOO not defined
#endif
#if !defined(CONFIG_BAR)
#error CONFIG_BAR not defined
#endif
#if !defined(CONFIG_TIME)
#error CONFIG_TIME not defined
#endif
#if !(CONFIG_FOO ^ CONFIG_BAR)
#error either CONFIG_FOO or CONFIG_BAR should be se
#endif
#if CONFIG_TIME > 250
#error CONFIG_TIME too big
#endif
Makefile
Указав компилятору выводить макросы препроцессора, можно (с небольшим количеством выражения sed
) передать Makefile
теми же значениями параметров, которые предусмотрены для данного проекта.