如何为3个不同的c文件创建一个makefile
我正在尝试为3个c文件创建一个make文件,这些文件是如何为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
文件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关于最后一步的观点很好,我忘了。关于最后一步的观点很好,我忘了。最后一步说得好,我忘了。最后一步说得好,我忘了。