c - 未使用 gcc 和 makefile 为 #ifdef 定义值

标签 c makefile conditional-compilation

所以我正在尝试学习 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/

相关文章:

if-statement - SCSS : using @if to include only certain selectors on compilation

visual-studio-2010 - 条件编译不起作用

c - 为什么会出现段错误?我正在使用 stat、mmap、nftw 和 memcmp 等

c++ - 串口传输错误如何解决?

c - strcpy 是如何实现的?

objective-c - 我可以#ifdef#imports 吗?

c - 试图将结构成员复制到 c 中的字节数组

c++ - Makefile 中无法识别 CFLAGS

关闭文件上的 Python 套接字 Makefile 错误 I/O 操作

makefile - % 和 * 一起放在依赖行上