更改 Makefile 标志时如何强制重新编译?
how to force recompile when changing Makefile flags?
我正在编译一些具有依赖性的项目,因此我不必每次都重新编译,但是当我将 -Dsome_flags 添加到我的 CFLAGS 时,它不会重新编译。
dep: $(CPPS)
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
我添加到我的 CFLAS -DDEBUG_FLAG,它迫使我做 make clean 和 make 而不是 make。
它不会重新编译,因为您没有将 makefile 本身列为依赖项。
dep: $(CPPS) Makefile
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
也就是说,如果您从命令行输入 make 标志(例如 CFLAGS=-O3 make all
),make
无法检测到您已更改这些标志并强制进行完整构建.
在我看来,最简单的方法是执行 make clean
,然后执行 make
。这当然是假设您希望由于编译器标志的更改而重新编译所有源文件。但是你好像不喜欢这个方法。
如果要修改makefile,可以在编译源文件的每一条规则中加上自己的makefile的名字,例如:
somefile.o : somefile.cpp <makefile_name>
$(CC) -c $(CFLAGS) somefile.cpp -o somefile.o
或
%.o : %.c <makefile_name>
$(CC) -c $(CFLAGS) somefile.cpp -o somefile.o
考虑到项目的规模和涉及的规则数量,执行 make clean; make
可能是最简单和最快的方法。然而,一如既往,你行我素。
仅值 0.02 美元,希望对您有所帮助
T.
Makefile 根据其拥有的数据查找更改。您的 Makefile 声明唯一的依赖项是在 $(CPPS).
下定义的
dep: $(CPPS)
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
所以 make 只跟踪给定列表中的更改,即 $(CPPS)。所以分辨率是:
dep: $(CPPS) Makefile
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
对于完整但不复杂的示例,这是我的 helloworld 程序的 Makefile:
OBJS = helloworld.o
default: hw
%.o: %.c Makefile
gcc -c $< -o $@
hw: $(OBJS)
gcc $(OBJS) -o $@
clean:
-rm -f $(OBJS) hw
每次我更改我的 makefile 时它都会重新编译! :)
我正在编译一些具有依赖性的项目,因此我不必每次都重新编译,但是当我将 -Dsome_flags 添加到我的 CFLAGS 时,它不会重新编译。
dep: $(CPPS)
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
我添加到我的 CFLAS -DDEBUG_FLAG,它迫使我做 make clean 和 make 而不是 make。
它不会重新编译,因为您没有将 makefile 本身列为依赖项。
dep: $(CPPS) Makefile
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
也就是说,如果您从命令行输入 make 标志(例如 CFLAGS=-O3 make all
),make
无法检测到您已更改这些标志并强制进行完整构建.
在我看来,最简单的方法是执行 make clean
,然后执行 make
。这当然是假设您希望由于编译器标志的更改而重新编译所有源文件。但是你好像不喜欢这个方法。
如果要修改makefile,可以在编译源文件的每一条规则中加上自己的makefile的名字,例如:
somefile.o : somefile.cpp <makefile_name>
$(CC) -c $(CFLAGS) somefile.cpp -o somefile.o
或
%.o : %.c <makefile_name>
$(CC) -c $(CFLAGS) somefile.cpp -o somefile.o
考虑到项目的规模和涉及的规则数量,执行 make clean; make
可能是最简单和最快的方法。然而,一如既往,你行我素。
仅值 0.02 美元,希望对您有所帮助 T.
Makefile 根据其拥有的数据查找更改。您的 Makefile 声明唯一的依赖项是在 $(CPPS).
下定义的dep: $(CPPS)
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
所以 make 只跟踪给定列表中的更改,即 $(CPPS)。所以分辨率是:
dep: $(CPPS) Makefile
$(CC) $(CFLAGS) $(INC) -M $(CPPS) > dep
对于完整但不复杂的示例,这是我的 helloworld 程序的 Makefile:
OBJS = helloworld.o
default: hw
%.o: %.c Makefile
gcc -c $< -o $@
hw: $(OBJS)
gcc $(OBJS) -o $@
clean:
-rm -f $(OBJS) hw
每次我更改我的 makefile 时它都会重新编译! :)