WARNFLAGS = -W -Wall -Werror
OPTFLAGS = -O3
CFLAGS += $(WARNFLAGS) $(OPTFLAGS)
CC = gcc
DOBJS = /Desktop/Sysprog/Uebungsblatt6/a4/awesome2/awesome.h /Desktop/Sysprog/Uebungsblatt6/a4/awesome3/awesome.h
#MODULES = awesome2 awesome3
$(OBJS): /Desktop/Sysprog/Uebungsblatt6/a4/awesome2/awesome.h /Desktop/Sysprog/Uebungsblatt6/a4/awesome3/awesome.h
awesome:
$(CC) $(CFLAGS) awesome.c -o $@
clean:
rm -f *~ *.o awesome
我已经尝试了所有方法,但是不知道如何将子目录中的头文件包含到makefile中。
我的awesome.c
在目录a4
中,awesome.h
在目录awesome2
和awesome3
中,我想编译awesome.c
,但是如果我进行编译,则找不到awesome.h
。我该如何运作。
答案 0 :(得分:1)
您需要在.c文件中包含.h文件。
可以在C源文件中放入include指令的两种形式:
#include "path/filename.h"
此版本的文件包含在引号之间,其中包含一个相对于.c文件目录的文件。您当然可以在其中放置绝对路径,但是不建议这样做,因为每当将code / .h文件移动到另一台计算机或其他位置时,都必须对其进行调整。
#include <path/filename.h>
文件包含在<和>之间时,将相对于您提供的编译器包含路径搜索文件。就您而言:
INC= /Desktop/Sysprog/Uebungsblatt6/a4/
$(CC) $(CFLAGS) awesome.c -o -I$(INC) $@
许多编译器使用-I开关为其提供标准的包含路径。对于您的编译器来说可能有所不同(并且大师可能会提供一些调整,因为我的Make生锈了)。