繁体   English   中英

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

[英]I've created a Makefile in c that should creates more than one executable, but it does not work

我需要做什么

我正在尝试在 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

我的解决方案

假设在同一目录中有 all.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 创建可执行文件,这是编译器的 output:

$ 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 文件的名称吗?

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

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

% : %.c

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM