没有使用gcc和makefile为#ifdef定义的值

时间:2019-05-04 10:26:52

标签: c makefile conditional-compilation

所以我试图学习makefile如何在c中编译程序,但是我无法使用gcc和main.o将其定义为“ OBJS ”。我有这个简单的main函数和makefile在其中尝试定义 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)

每次我编译程序然后执行它时,我总是得到“ not ok”的输出,这意味着未定义测试,有人知道如何使用main.o来使这项工作如“ OBJS < / em>”。 谢谢

1 个答案:

答案 0 :(得分:1)

您需要为编译未链接的命令定义。

在您的设置中,该命令是隐式的(通常在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)