我有这个Makefile
CFLAGS=-g
LDFLAGS=-g
exec: fluxo.o validar.o ficheiroParaMemoria.o
fluxo.o: fluxo.c
validar.o: validar.c validar.h
ficheiroParaMemoria.o: ficheiroParaMemoria.c ficheiroParaMemoria.h
clean:
rm -f run *.o
它将创建3个.o文件,但未创建可执行文件。 Fluxo.c有主要的功能。 不可见项仅显示在每行的末尾,并且在clean命令之前显示Tabe
答案 0 :(得分:1)
对不起,我不了解您的Makefile,但这是我项目中的Works Makefile:
CC = gcc
FLAGS = -std=c99
DEST_PATH = "./bin/main"
all: clean main.o Smtp.o Base64.o
$(CC) build/*.o -o $(DEST_PATH) $(FLAGS)
main.o: src/main.cpp src/Service/Smtp.hpp
$(CC) src/main.cpp -c -o build/main.o $(FLAGS)
Smtp.o: src/Service/Smtp.cpp src/Service/Smtp.hpp
$(CC) src/Service/Smtp.cpp -c -o build/Smtp.o $(FLAGS)
Base64.o: src/Service/Base64.cpp src/Service/Base64.hpp
$(CC) src/Service/Base64.cpp -c -o build/Base64.o $(FLAGS)
clean:
rm -f build/*
-c
标志创建对象文件(.o)。
在您的示例中,除了rm
外,我没有看到任何实际的命令。
希望有帮助。
答案 1 :(得分:0)
解决了。需要将名称“ exec”更改为“ fluxo”,因为其中包含主要功能
答案 2 :(得分:0)
您的Makefile不包含任何构建可执行文件的规则。该规则是最接近的规则-它在这3个目标文件和一个名为“ exec”的目标之间创建依赖关系。
exec: fluxo.o validar.o ficheiroParaMemoria.o
如果要从这3个目标文件中构建“ exec”,则需要扩展规则以包括执行此操作的命令。
exec: fluxo.o validar.o ficheiroParaMemoria.o
$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
在命令$@
中用于指示目标,因此在这种情况下将是“ exec”。 $^
是依赖项。
之所以不需要添加命令来构建.o文件,是因为make包含了一个内置规则,用于从同名的.c文件中构建.o文件。还有一个内置规则,可以从同名的.o或.c生成可执行文件,但是在这种情况下用处不大,因为它不包含其他2个.o文件
此外,LDFLAGS
通常用于指定链接选项而不是编译选项,因此您不需要其中的“ -g”