所以我正在尝试学习 makefile 如何在 c 中编译程序,但是我无法使用 gcc 和 main.o 将某些东西定义为“OBJS”我有这个简单的 main 函数和 makefile我在其中尝试定义 test
主.c
#include <stdio.h>
int main(){
#ifdef test
printf("ok\n");
#else
printf("not ok\n");
#endif
return 0;
}
生成文件
MODULES = ../
OBJS = main.o
CFLAGS = -g -Wall
PROGRAM = defineprog
$(PROGRAM): clean $(OBJS)
gcc -D test $(OBJS) -o $(PROGRAM)
clean:
rm -f $(PROGRAM) $(OBJS)
run: $(PROGRAM)
./$(PROGRAM)
每次我编译我的程序然后执行它时,我总是得到输出“not ok”,这意味着测试没有定义,有没有人知道如何使用 main.o 作为“OBJS”。 谢谢
最佳答案
您需要为执行编译而不是链接的命令定义。
在您的设置中,该命令是隐式的(在 Make 的数据库中找到作为从 *.c
文件创建 *.o
文件的规则)但它确实使用CFLAGS
Make 变量,所以你可以做的是将 -Dtest
添加到你的 CFLAGS
Make 变量中:
OBJS = main.o
CFLAGS = -Dtest -g -Wall
PROGRAM = defineprog
$(PROGRAM): $(OBJS)
gcc -D test $(OBJS) -o $(PROGRAM)
clean:
rm -f $(PROGRAM) $(OBJS)
run: $(PROGRAM)
./$(PROGRAM)
关于c - 未使用 gcc 和 makefile 为 #ifdef 定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55981605/