C中的条件编译无法按预期工作

问题描述 投票:0回答:2

这是我的主程序:

#include <stdio.h>

int main(void)
{
    #ifdef MONO
    printf("MONO is defined\n");

    #elif DEBUG
    printf("DEBUG is defined\n");

    #else
    printf("Nothing is defined\n");
    #endif

    return 0;
}

和我的makefile:

# Makefile Variables
CC = gcc
EXEC     =
CFLAGS = -Wall -g -ansi -pedantic -Werror
OBJ      = test.o

# Add MONO to the CFLAGS and recompile the program
ifdef
CFLAGS += -D MONO
FANCY : clean $(EXEC)
endif

# Add DEBUG to the CFLAGS and recompile the program
ifdef
CFLAGS += -D DEBUG
DEBUG : clean $(EXEC)
endif

$(EXEC) : $(OBJ)
        $(CC) $(OBJ) -o $(EXEC)

test.o : test.c
        $(CC) $(CFLAGS) test.c -c

clean:
        rm -f $(EXEC) $(OBJ)

[基本上,我正在尝试使用DEBUG和MONO进行条件编译。问题是,当在我的Makefile中两个都未定义时,如上所示,它仍然显示“正在测试...已定义MONO”。我通过键入“ make”进行编译,这使我得到“ gcc -Wall -g -ansi -pedantic -Werror test.c -c”并由./test运行

c makefile
2个回答
1
投票
也请阅读有关ifdef的文档

[如果在Linux上,请考虑使用invoking gcc调用的gcc调试Makefile。这非常有帮助。

您也可以考虑切换到其他remake,例如-x


© www.soinside.com 2019 - 2024. All rights reserved.