我在 c 中创建了一个 Makefile,它应该创建多个可执行文件,但它不起作用

时间:2021-03-12 19:51:50

标签: c makefile

我需要做什么

我正在尝试在 c 中创建一个 Makefile,它应该从三个不同的 .c 文件创建三个可执行文件。 我想创建 Lez4Es1、Lez4Es1v2 和 Lez4Es3 作为我在两个不同阶段编译和链接的可执行文件。 如:

gcc -std=c99 -Wall -pedantic Lez4Es1.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.o -o Lez4Es1

gcc -std=c99 -Wall -pedantic Lez4Es1v2.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.v2 -o Lez4Es1v2

gcc -std=c99 -Wall -pedantic Lez4Es3.c -c
gcc -std=c99 -Wall -pedantic Lez4Es3.o -o Lez4Es3

我的解决方案

假设所有 .c 文件都在同一个目录中,我创建了这个 Makefile 但它不起作用:

CC      =   gcc

CFLAGS      +=  -std=c99 -Wall -pedantic -g

TARGETS     =   Lez4Es1     \
                Lez4Es1v2   \
                Lez4Es3     \

.PHONY: all clean cleanall  

% : %.o
    $(CC) $(CFLAGS)  $^ -o $@  

%.o : %.c
    $(CC) $(CFLAGS) -c $^

all : $(TARGETS)

clean : 
    -rm *.o *~ core

cleanall : 
    -rm *.o *.txt -f $(TARGETS) *~ core

问题

当我运行 $ make 时,它​​会从 .c 文件而不是 .o 文件创建可执行文件,这是编译器的输出:

$ make
    gcc -std=c99 -Wall -pedantic -g    Lez4Es1.c   -o Lez4Es1
    gcc -std=c99 -Wall -pedantic -g    Lez4Es1v2.c   -o Lez4Es1v2
    gcc -std=c99 -Wall -pedantic -g    Lez4Es3.c   -o Lez4Es3

如何解决让他做我想做的事情? 有没有一种方法可以为可执行文件指定与 .o 文件不同的名称?

对不起,我的英语不好,如果我没有很好地解释它,我准备编辑它并提供更多细节,谢谢。

1 个答案:

答案 0 :(得分:2)

尝试删除从源文件创建可执行文件的内置规则:

% : %.c

(没有配方的模式规则会取消该规则)。