将makefile中的宏传递给源码

前言:

今天遇到一个问题,在makefile中定义个宏,宏为一个字符串,希望将该字符串传递给代码。但是一直传递不过去,最后才找到原因,这里小结一下。

 

直接上代码,makefile 如下:

C_FLAGS := -DTEST_MACRO_HEHE="abcd1234"

test: test.o
    gcc -o $@ $^

test.o: test.c
    gcc $(C_FLAGS) -c -o $@ $< -Iinclude

clean:
    rm -f *.o
    rm -f test

makefile 希望将宏TEST_MACRO_HEHE传递到代码中。

 

来看下代码:

#include 


int main() {
    printf("---- main.\n");

#ifdef TEST_MACRO_HEHE
    printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
#else
    printf("==== not defined\n");
#endif

    return 0;
}

 

编译的时候报错:

gcc -DTEST_MACRO_HEHE="abcd1234" -c -o test.o test.c -Iinclude
test.c: In function ‘main’:
:0:17: error: ‘abcd1234’ undeclared (first use in this function)
test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’
     printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
                                         ^
:0:17: note: each undeclared identifier is reported only once for each function it appears in
test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’
     printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
                                         ^
Makefile:7: recipe for target 'test.o' failed
make: *** [test.o] Error 1

如果宏定义为一个数字,例如12,这样编译是可以的,代码中也能识别该宏。

但是,如果想要传递字符串,在Makefile中需要注意,需要使用转义,如下:

C_FLAGS := -DTEST_MACRO_HEHE=\"abcd1234\"

test: test.o
    gcc -o $@ $^

test.o: test.c
    gcc $(C_FLAGS) -c -o $@ $< -Iinclude

clean:
    rm -f *.o
    rm -f test

 

 

 

你可能感兴趣的:(Makefile)