未使用gcc和makefile为#ifdef定义值
所以我试图学习makefiles如何在c中编译程序,但是我不能用gcc和main.o作为“OBJS”来定义一些东西。我有一个简单的main函数和makefile,我试图在其中定义test main.c未使用gcc和makefile为#ifdef定义值,c,makefile,conditional-compilation,C,Makefile,Conditional Compilation,所以我试图学习makefiles如何在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; } 每次
#include <stdio.h>
int main(){
#ifdef test
printf("ok\n");
#else
printf("not ok\n");
#endif
return 0;
}
每次我编译我的程序并执行它时,我总是得到输出“notok”,这意味着测试没有定义,有人知道如何使用main.o作为“OBJS”来实现这一点吗。
谢谢您需要为不链接编译的命令定义 在您的设置中,该命令是隐式的(作为从
*.c
文件中创建*.o
文件的规则,可以在Make的数据库中找到),但它确实使用了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)
$(程序):clean$(OBJS)
毫无意义。您告诉make您的程序依赖于创建所有对象文件($(OBJS)
)和删除所有对象文件(clean
)。-D test
是预处理器选项。当您在对象文件上调用gcc时,它不会做任何事情。(这与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)