如何为每个make强制完全重新编译所有文件?

时间:2015-06-04 05:55:04

标签: c makefile

我希望为小规模的C应用程序创建一个基本的makefile模板。在这种情况下,我不太关心性能而不是清晰度,并且想要重新编译所有内容 - 所有.h和.c文件以及第三方.so文件。

# Constants
#===============================================================================

# Specify the C complier
CC = gcc

# List the flags to pass to the compiler
#  -ggdb       Compile with debug information for gdb
#  -Wall       Give all diagnostic warnings
#  -O0         Do NOT optimize generated code
#  -m64        Generate code for a 64-bit environment
CFLAGS = -ggdb -Wall -O0 -m64

# Change the list of c source files into a list of object files by replacing
# the .c suffix with .o
OBJECTS := $(patsubst %.c,%.o,$(wildcard *.c))

# List libraries
# m    Math library
LIBRARIES = -lm

# Specify the build target
TARGET = heyyou

# Rules
#===============================================================================
# $@ = left side of the colon, the target
$(TARGET) : $(OBJECTS)
    @echo "Compiling $@..."
    $(CC) -o $(TARGET) $(OBJECTS) $(CFLAGS) $(LIBRARIES)

3 个答案:

答案 0 :(得分:2)

您可以在makefile中添加一个干净的函数,例如:

clean:
    rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
    rm -rf *.lst *.map

在您的情况下,您还可以添加:

rm -rf $(OBJECTS) 

然后,您只需在致电make clean

之前致电make

答案 1 :(得分:1)

如果您已经考虑到所有的重要性而正确地制作了Makefile,只需使用

即可
make clean

如果您制作了正确的Makefile,则会自动处理所有依赖项,并且对于您在文件系统中所做的每项更改,您都不必执行" make clean"每次。一个简单的" make"就足够了 如果您还没有处理make中的所有依赖项,那么您会注意到源代码中的更改不会反映在二进制文件中。 因此,解决这个问题的一个简单方法是在Makefile中添加这些行

clean:
    rm *.so
    rm *.o

现在,对于每个编译,执行类似

的操作
make clean 
make 

它不是处理Makefile的正确方法,但它在一些令人沮丧的情况下是一个救世主。

答案 2 :(得分:0)

您可以在make命令行中指定-B选项。

make -B