在makefile中实现子目录

时间:2018-12-10 16:23:00

标签: c makefile

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在目录awesome2awesome3中,我想编译awesome.c,但是如果我进行编译,则找不到awesome.h。我该如何运作。

1 个答案:

答案 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生锈了)。