首页 > 解决方案 > 我在 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 文件的名称吗?

抱歉我的英语不好,如果我没有很好地解释它,我准备编辑它并给你更多细节,谢谢。

标签: cmakefile

解决方案


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

% : %.c

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


推荐阅读