c - 使文件对预处理器定义敏感

标签 c makefile gnu-make

我写了一个make文件。

在 make 文件中我使用了一个变量,比如 EXTRAFLAGS,它看起来像这样。

EXTRAFLAGS += -D _MSC_VER
EXTRAFLAGS += -D BINARYINPUT
EXTRAFLAGS += -D ENABLEVERSION2D2

此外, 我使用编译器标志

CFLAGS = -Werror -Wall -I $(INC) $(EXTRAFLAGS)

mingw32-gcc $(CFLAGS) -o nameofexe  OBJ's 

我使用这个 makefile 没有任何问题。但是,当我禁用预处理器定义时,通过在 EXTRAFLAGS 中的一个语句之前引入“#”,并重新制作它,我得到了最新的目标。我无法将预处理器定义引入敏感列表。

我目前使用的临时解决方法是,引入一个虚假目标清理并删除所有目标文件并重新编译所有内容。但这是浪费时间。我怎样才能更好地管理当前情况?

最佳答案

您没有使您的 .o 文件依赖于 makefile 本身中的 Makefile。

当您在 Makefile 中输入/输出注释内容时,您不会更改 .o 文件所依赖的任何内容——这与编辑 .c 文件时不同

您可以简单地通过创建 .o 或 .c 文件的依赖关系来包含 Makefile 本身来解决此问题,并且当您更新 Makefile 中的任何内容时,所有源代码都将重新编译。

例如;

  SRC=a.c b.c
  OBJS=a.o b.o
  EXE=ab

  $(EXE): $(OBJS)
       gcc -o $(EXE) $(OBJS) $(...anything-else...)

  $(OBJS): $(SRC) Makefile

(现在有更好的方法来生成 .c 和 .o 列表,但上面的方法应该足以满足此示例)

关于c - 使文件对预处理器定义敏感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8292099/

相关文章:

linux - gstreamer 插件开发问题,gst-inspect 说 : undefined symbol: gst_video_format_new_caps

linux - 如何让 android 在 ubuntu 14.04 上运行得更快?

perl - WWW::Mechanize::Firefox - OpenSuse-Linux 版本 12.1 上的安装问题

CreateProcess() 因访问冲突而失败

c# - 如何编码 Int 数组或指向 Int 数组的指针

c - 使用静态模式规则会导致单个源更改重建所有

makefile - Make 中的默认规则

c - gcc:错误:Makfile 中无法识别的命令行选项 '-Wl'

c - 对正在写入的文件调用 stat() 的结果是什么?

编译器错误 - 在 C 编程中取消引用指向不完整类型的指针