Как включить переменную makefile в директиву include препроцессора - PullRequest
2 голосов
/ 23 октября 2019

Я хочу включить заголовочные файлы на основе переменных makefile.

MakeFile

DISC     := left

Передать эту переменную в программу C, как показано ниже:

CFLAGS += -DNAME=\"$(DISC)\"

Inmain.c, необходимо включить заголовок для правильного диска на основе переменной makefile.

Можно ли сделать

#include "NAME_header.h" 

(где NAME передается из make-файла)

Я получаю сообщение об ошибке компиляции Ошибка: NAME_header.h не найден.

Действительно ли возможно включить заголовочные файлы таким образом?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Рабочий раствор:

Makefile:

DISC := left
CFLAGS += -DNAME=$(DISC)

C или C ++ источник:

#define STR(s) STR2(s)
#define STR2(s) #s
#define EXPAND(s) s

#include STR(EXPAND(NAME)_header.h)
0 голосов
/ 23 октября 2019

Альтернативное решение; рассмотрите возможность использования файла прокси. Подробнее о смешивании макросов и # include смотрите ниже.

В Makefile создайте v_header.h

echo '#include "$ {DISC} _header.h"'> v_header.h

Что может быть включено

# include "v_header.h"

В настоящее время грамматика cpp не позволяетиспользование макросов как часть оператора '#include'. Это должен быть «path.h» или «». Операторы «stringifaction» (и «#», и «##») не обрабатываются для директив препроцессора (строка начинается с «#»)

// Not working
#include NAME
#include #NAME
#include "#NAME"
#include "##NAME"
...