'Why does the definition of makefile not take effect using -D?

I wrote a simple c++ code. I wanted to choose to execute one of the codes through the -D option of makefile, but it didn't execute? For example, code1 and code2.

1.main.cpp

#include "./common.h"
#include "./ns_api.h"
    
int TestFunc3(void)
{
    
}

int test = 10;
        
int main(int argv, char **argc)
{
    extern int b;
    int a = b;
    printf("This is a test!\n");

    #ifdef TEST_ADD
    printf("test_add!\n");   //code1
    #endif
    #if TEST_SUB
    printf("test_sub!\n");   //code2
    #endif
    return 0;
}
int b;

2.makefile

root#cat makefile
GPP = g++

CFLAGS += -O3

objects = *.o
src = *.cpp


test:$(objects)
        $(GPP) $(CFLAGS) -o test $(objects)

$(objects):$(src)
        $(GPP) -c $(src)

.PHONY:clean
clean:
        rm test *.o

3.compile

root#make CFLAGS=-DTEST_ADD CFLAGS+=-DTEST_SUB=1
g++ -c *.cpp
g++ -DTEST_ADD -DTEST_SUB=1 -o test *.o

4.result:

root#./test
This is a test!


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source