我写了一个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/