抱歉我的英语不好......
这是我的问题: 我的应用程序由main.c(主程序),functions.c(代码),functions.h(原型)和headers.h(typedef,定义等)组成。
在main的代码中(当然在functions.c中)我包含functions.h,而在functions.h中我包含headers.h。
我应该如何在makefile中编译headers.h?我没有headers.c:我还需要创建headers.o吗?
这是我的makefile的代码:
application: main.o functions.o
gcc -o application main.o functions.o
main.o: main.c functions.o
gcc -c -Wall -pedantic main.c
functions.o: functions.c functions.h
gcc -c -Wall -pedantic functions.c
clean:
rm -f *.o
如果我使用
手动编译headers.h,一切正常gcc -c -Wall -pedantic headers.h
编辑:这不再是真的。我不知道为什么5分钟前它有效。
获取.gch文件。我应该在makefile中写哪一行?
谢谢!
答案 0 :(得分:4)
你没有编译标题。相反,你可以这样做:
main.o: main.c headers.h
gcc -c -Wall -pedantic main.c
functions.o: functions.c functions.h headers.h
gcc -c -Wall -pedantic functions.c
答案 1 :(得分:2)
只需在此处添加标题:
v
functions.o: functions.c functions.h headers.h
gcc -c -Wall -pedantic functions.c
在main中添加标头。您可以删除functions.o,除非您希望main.o依赖于functions.o:
main.o: main.c functions.h headers.h
gcc -c -Wall -pedantic main.c
您不需要创建headers.o,也不应该编译头文件。
答案 2 :(得分:2)
您不必编译标题。你可以这样做:
SRCS = ./main.c \
./function.c \
OBJS = $(SRCS:.c=.o)
all: application
application: $(OBJS)
gcc -Wall -pedantic $(OBJS) -I./ -o output_name
clean:
rm -f $(OBJS)
然后:make all
答案 3 :(得分:1)
除了其他答案....
[我]正在获取.gch文件。我应该在makefile中写哪一行?
.gch
扩展名适用于GCC预编译标头。这不是新手的功能,它不适用于小型(不到50万个源代码行)软件项目。有关预编译标头的更多信息,请参阅this answer,这可能是您不需要的。
因此,在修复Makefile
并将源代码提交到版本控制系统后(如果您不使用它,请在执行任何其他操作之前使用 now git !),你可以rm -vif *.gch