Вы можете попробовать рефакторинг макросов, чтобы разрешить внешнюю конфигурацию, например
/* config.h */
/* set defaults for a and b */
#ifndef a
#define a 100
#endif
#ifndef b
#define b 200
#endif
и
/* main.c */
#include "config.h"
int main(void)
{
int c = a + b;
}
Затем вы можете установить макросы извне при сборке, например, так:
$ gcc -E -Da=a main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 1 "config.h" 1
# 4 "main.c" 2
int main(void)
{
int c = a + 200;
}
$ gcc -E -Db=b main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 1 "config.h" 1
# 4 "main.c" 2
int main(void)
{
int c = 100 + b;
}
Теперь, конечно, у вас нет для использования отдельного заголовка конфигурации, но я бы порекомендовал его с точки зрения обслуживания, это облегчит отслеживаниедоступные настройки конфигурации и их настройки по умолчанию.