gpt4 book ai didi

c - 'make' 等同于 gcc 中的 -D 标志

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:44 24 4
gpt4 key购买 nike

我的 C 代码有各种文件,这些文件包含我只想在定义了宏时才执行的语句。我有两个文件,每个文件都有以下代码:

#ifdef SOME_MACRO
printf("macro defined\n");
#else
printf("macro undefined");
#endif

我的 Makefile 包含:

make -C /lib/modules/$(shell uname -r )/build M=$(PWD) modules $(CFLAGS)

我调用 make 为:

make all CFLAGS=SOME_MACRO=10    

当我执行生成的程序时,我得到“宏未定义”指示宏未定义。

我也试过称它为:

make all CFLAGS=SOME_MACRO

这给了我:

make[1]: *** No rule to make target `SOME_MACRO'.  Stop.
make[1]: Leaving directory `/X/Y/Z'
make: *** [default] Error 2

也称它为:

make all CFLAGS=-DSOME_MACRO=10

如给定herehere但这也不起作用。

我如何使它工作?

最佳答案

第三种形式是正确的(make all CFLAGS=-DSOME_MACRO=10 或只是make all CFLAGS=-DSOME_MACRO)。但是您调用的 make 文件必须实际使用该 CFLAGS 宏。

品牌 implicit rules编译可执行文件或 objective-c 文件将使用 CFLAGS,但如果不查看该 makefile 的内容或 make 的输出,我们无法判断它是被调用还是被覆盖。

make 的输出应该显示构建命令。从 .c 文件生成 .o 的隐式规则是 $(CC) $(CPPFLAGS) $(CFLAGS) -c 所以你应该看到类似 cc -DSOME_MACRO=2 -DFOO=99 -c -o x.o x.c 给你编译目标文件,如果你编译可执行文件则类似。

还要确保您的清洁计划正确 make clean。并确保清理实际上是递归的(即也清理您的“模块”项目)...

编辑:哦,是的...正如@nneonneo 的回答指出的那样,您在递归 make 调用时也有错误,这绝对是一个问题(我认为您正在直接运行第二个 make 命令以调试问题..)。以上可能仍然适用。

关于c - 'make' 等同于 gcc 中的 -D 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40415364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com