如何为3个不同的c文件创建一个makefile

如何为3个不同的c文件创建一个makefile,c,linux,makefile,C,Linux,Makefile,我正在尝试为3个c文件创建一个make文件,这些文件是文件a.c文件b.c文件c.c-我希望能够通过键入文件a\u 1来创建一个可执行文件。其他2个文件也一样 另外,通过键入makeclean删除所有.o文件。我试过这个: All: file_a_1 file_b_1 file_c_1 file_a_1: file_a.c file_a.c -o file_a_1 file_b_1: file_b.c file_b.c -o file_b_1 file_c_1: file_c.c file

我正在尝试为3个c文件创建一个make文件,这些文件是
文件a.c
文件b.c
文件c.c
-我希望能够通过键入
文件a\u 1
来创建一个可执行文件。其他2个文件也一样

另外,通过键入
makeclean
删除所有
.o
文件。我试过这个:

All: file_a_1 file_b_1 file_c_1

file_a_1: file_a.c
file_a.c -o file_a_1

file_b_1: file_b.c
file_b.c -o file_b_1

file_c_1: file_c.c
file_c.c -o file_c_1

clean:
rm -rf file_a_1.o
rm -rf file_b_1.o
rm -rf file_c_1.o
但它不起作用


有人能帮我创建这个makefile吗?

您的makefiles需要选项卡。我想你也错过了编译器的调用。如果您在一个步骤中进行编译和链接,那么就不会有对象文件

.PHONY: all
all: file_a_1 file_b_1 file_c_1

file_a_1:
    gcc file_a.c -o file_a_1

file_b_1:
    gcc file_b.c -o file_b_1

file_c_1:
    gcc file_c.c -o file_c_1

clean:
    rm -rf file_a_1
    rm -rf file_b_1
    rm -rf file_c_1

您的makefile需要选项卡。我想你也错过了编译器的调用。如果您在一个步骤中进行编译和链接,那么就不会有对象文件

.PHONY: all
all: file_a_1 file_b_1 file_c_1

file_a_1:
    gcc file_a.c -o file_a_1

file_b_1:
    gcc file_b.c -o file_b_1

file_c_1:
    gcc file_c.c -o file_c_1

clean:
    rm -rf file_a_1
    rm -rf file_b_1
    rm -rf file_c_1

您的makefile需要选项卡。我想你也错过了编译器的调用。如果您在一个步骤中进行编译和链接,那么就不会有对象文件

.PHONY: all
all: file_a_1 file_b_1 file_c_1

file_a_1:
    gcc file_a.c -o file_a_1

file_b_1:
    gcc file_b.c -o file_b_1

file_c_1:
    gcc file_c.c -o file_c_1

clean:
    rm -rf file_a_1
    rm -rf file_b_1
    rm -rf file_c_1

您的makefile需要选项卡。我想你也错过了编译器的调用。如果您在一个步骤中进行编译和链接,那么就不会有对象文件

.PHONY: all
all: file_a_1 file_b_1 file_c_1

file_a_1:
    gcc file_a.c -o file_a_1

file_b_1:
    gcc file_b.c -o file_b_1

file_c_1:
    gcc file_c.c -o file_c_1

clean:
    rm -rf file_a_1
    rm -rf file_b_1
    rm -rf file_c_1

除使用选项卡外,如前一张海报所述,如果您正在做多个类似的事情,您可能希望使用隐式生成规则:

.PHONY: all clean
TARGETS = file_a_1 file_b_1 file_c_1

all: $(TARGETS)

.c:
    gcc -o $@ $<

clean:
    rm -rf $(TARGETS) *.o

通常,“清除”也会删除目标可执行文件。通过从gcc命令直接链接的方式,您可能不会有任何*.o文件。

如前一张海报所述,除了使用选项卡外,如果您正在执行多个类似的操作,您可能还需要使用隐式生成规则:

.PHONY: all clean
TARGETS = file_a_1 file_b_1 file_c_1

all: $(TARGETS)

.c:
    gcc -o $@ $<

clean:
    rm -rf $(TARGETS) *.o

通常,“清除”也会删除目标可执行文件。通过从gcc命令直接链接的方式,您可能不会有任何*.o文件。

如前一张海报所述,除了使用选项卡外,如果您正在执行多个类似的操作,您可能还需要使用隐式生成规则:

.PHONY: all clean
TARGETS = file_a_1 file_b_1 file_c_1

all: $(TARGETS)

.c:
    gcc -o $@ $<

clean:
    rm -rf $(TARGETS) *.o

通常,“清除”也会删除目标可执行文件。通过从gcc命令直接链接的方式,您可能不会有任何*.o文件。

如前一张海报所述,除了使用选项卡外,如果您正在执行多个类似的操作,您可能还需要使用隐式生成规则:

.PHONY: all clean
TARGETS = file_a_1 file_b_1 file_c_1

all: $(TARGETS)

.c:
    gcc -o $@ $<

clean:
    rm -rf $(TARGETS) *.o

通常,“清除”也会删除目标可执行文件。通过从gcc命令直接链接的方式,您可能不会有任何*.o文件。

您可能需要研究为您生成大量文件的CMAKE或其他构建系统you@DougT. 说得好。看看这个,你可能想看看CMAKE或者其他的构建系统,它们会为你产生很多这样的信息you@DougT. 说得好。看看这个,你可能想看看CMAKE或者其他的构建系统,它们会为你产生很多这样的信息you@DougT. 说得好。看看这个,你可能想看看CMAKE或者其他的构建系统,它们会为你产生很多这样的信息you@DougT. 说得好。看到这个了。谢谢你的回答,什么是假的?@user2970210谢谢你的回答,什么是假的?@user2970210谢谢你的回答,什么是假的?@user2970210谢谢你的回答,什么是假的?@user2970210关于最后一步的观点很好,我忘了。关于最后一步的观点很好,我忘了。最后一步说得好,我忘了。最后一步说得好,我忘了。