C:如何用makefile编译另一个头文件中包含的头文件?

时间:2016-01-08 10:46:05

标签: c makefile header-files

抱歉我的英语不好......

这是我的问题: 我的应用程序由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中写哪一行?

谢谢!

4 个答案:

答案 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