значение не определено для #ifdef с использованием gcc и makefile - PullRequest
1 голос
/ 04 мая 2019

Итак, я пытаюсь узнать, как make-файлы работают для компиляции программ в c, но я не могу определить что-то, используя gcc и main.o как « OBJS ». У меня есть эта простая основная функция и make-файл в который я пытаюсь определить test

main.c

#include <stdio.h>

int main(){
    #ifdef test
        printf("ok\n");
    #else 
        printf("not ok\n"); 
    #endif

    return 0;
}

makefile

MODULES = ../
OBJS = main.o
CFLAGS = -g -Wall
PROGRAM = defineprog

$(PROGRAM): clean $(OBJS)
    gcc -D test $(OBJS) -o $(PROGRAM)

clean:
    rm -f $(PROGRAM) $(OBJS)

run: $(PROGRAM)
    ./$(PROGRAM)

Каждый раз, когда я компилирую свою программу и затем выполняю ее, я всегда получаю вывод «не в порядке», что означает, что тест не определен, кто-нибудь знает, как заставить это работать, используя main.o как « OBJS ». Спасибо

1 Ответ

1 голос
/ 04 мая 2019

Вам необходимо определить команду, которая не выполняет компиляцию .

В вашей настройке эта команда неявна (находится в базе данных Make как правило для создания *.o файлов из *.c файлов), но она использует переменную CFLAGS Make, поэтому вы можете добавить -Dtest к вашему CFLAGS Сделать переменную:

OBJS = main.o
CFLAGS = -Dtest -g -Wall
PROGRAM = defineprog

$(PROGRAM): $(OBJS)
    gcc -D test $(OBJS) -o $(PROGRAM)

clean:
    rm -f $(PROGRAM) $(OBJS)

run: $(PROGRAM)
  ./$(PROGRAM)
...