將makefile中的巨集傳遞給原始碼
阿新 • • 發佈:2022-12-03
前言:
今天遇到一個問題,在makefile中定義個巨集,巨集為一個字串,希望將該字串傳遞給程式碼。但是一直傳遞不過去,最後才找到原因,這裡小結一下。
直接上程式碼,makefile 如下:
1 C_FLAGS := -DTEST_MACRO_HEHE="abcd1234" 2 3 test: test.o 4 gcc -o $@ $^ 5 6 test.o: test.c 7 gcc $(C_FLAGS) -c -o $@ $< -Iinclude 8 9 clean: 10 rm -f *.o 11 rm -f test
makefile 希望將巨集TEST_MACRO_HEHE傳遞到程式碼中。
來看下程式碼:
1 #include <stdio.h> 2 3 4 int main() { 5 printf("---- main.\n"); 6 7 #ifdef TEST_MACRO_HEHE 8 printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE); 9 #else 10 printf("==== not defined\n"); 11 #endif 12 13 return 0; 14 }
編譯的時候報錯:
1 gcc -DTEST_MACRO_HEHE="abcd1234" -c -o test.o test.c -Iinclude 2 test.c: In function ‘main’: 3 <command-line>:0:17: error: ‘abcd1234’ undeclared (first use in this function) 4 test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’ 5 printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE); 6 ^ 7<command-line>:0:17: note: each undeclared identifier is reported only once for each function it appears in 8 test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’ 9 printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE); 10 ^ 11 Makefile:7: recipe for target 'test.o' failed 12 make: *** [test.o] Error 1
如果巨集定義為一個數字,例如12,這樣編譯是可以的,程式碼中也能識別該巨集。
但是,如果想要傳遞字串,在Makefile中需要注意,需要使用轉義,如下:
1 C_FLAGS := -DTEST_MACRO_HEHE=\"abcd1234\" 2 test: test.o 3 gcc -o $@ $^ 4 test.o: test.c 5 gcc $(C_FLAGS) -c -o $@ $< -Iinclude 6 clean: 7 rm -f *.o 8 rm -f test
轉自:https://blog.csdn.net/shift_wwx/article/details/90673865