所以我试图学习makefile如何在c中编译程序,但是我无法使用gcc和main.o将其定义为“ OBJS ”。我有这个简单的main函数和makefile在其中尝试定义 test
main.c
#include <stdio.h>
int main(){
#ifdef test
printf("ok\n");
#else
printf("not ok\n");
#endif
return 0;
}
makefile
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 < / em>”。 谢谢
答案 0 :(得分:1)
您需要为编译未链接的命令定义。
在您的设置中,该命令是隐式的(通常在Make的数据库中找到,用于创建*.o
个文件中的*.c
个文件),但是该命令确实使用了CFLAGS
Make变量,因此您可以将-Dtest
添加到CFLAGS
生成变量中:
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)