Как изменить определения макросов через make в C - PullRequest
0 голосов
/ 19 мая 2018

Итак, я делаю C-программу, которая получает свою память из массива static unsigned char[M_SIZE], где M_SIZE - макрос.Мне нужно изменить значение этого макроса с помощью команды make, чтобы кто-то мог скомпилировать программу с другим размером зарезервированной памяти в зависимости от аргументов, переданных make.

MyПример файла заголовка - DataStore.h

#ifndef DATA_STORE_H
#define DATA_STORE_H

#define M_SIZE 50000 // Need this to be configurable via make arguments

unsigned char* DataStore_get_buf(void);
unsigned char* DataStore_get_end(void);
void DataStore_inc_ptr(void);

#endif

Мой пример файла C - DataStore.c

#include "DataStore.h"

static unsigned char DataStore_BUFFER[M_SIZE];
static unsigned char* DataStore_PTR = DataStore_BUFFER;

unsigned char* DataStore_get_buf(void)
{
   return DataStore_BUFFER;
}

unsigned char* DataStore_get_end(void)
{
   return DataStore_BUFFER + M_SIZE;
}

void DataStore_inc_ptr(void)
{
    DataStore_PTR++;
}

Итак, в основном мне нужен способ изменить M_SIZE до того, как программа будет скомпилирована с помощью некоторыхкоманда или некоторая конфигурация, которую можно передать в make.

Edit1:

Этот вопрос уникален, потому что мне нужен метод, чтобы не просто передать настраиваемое значение макроса, но обработать случай, в которомэто значение не передается как команда, а вместо этого используется значение макроса по умолчанию.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Если вы уверены, что хотите установить фиксированный размер во время компиляции, измените заголовок так:

#ifndef M_SIZE
#define M_SIZE 50000
#endif

Затем вы можете переопределить макрос в командной строке компилятора:

cc … -DM_SIZE=100000 …

По умолчанию оставлено так, что если опция компилятора не указана, код все равно будет скомпилирован разумно.Вместо этого вы можете решить, что хотите, чтобы компиляция не удалась, но обычно это не очень хороший выбор.

0 голосов
/ 19 мая 2018

Удалите #define и передайте значение в командную строку компилятора, как gcc -DM_SIZE=1000.Или, что еще лучше, выделите через malloc и передайте размер в качестве аргумента командной строки, а затем извлеките его через argv, что позволит изменить размер без перекомпиляции.

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