首页 > 解决方案 > 在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 中。

My awesome.cis in directory a4, awesome.his in directory awesome2and awesome3, 我想编译awesome.c,但如果我编译它没有找到awesome.h。我怎样才能让它工作。

标签: cmakefile

解决方案


您需要在 .c 文件中包含 .h 文件。

您可以在 C 源文件中放入两种形式的 include 指令:

#include "path/filename.h"

此版本的文件包含在引号之间,包含一个相对于 .c 文件目录的文件。您当然可以在那里放置一个绝对路径,但不建议这样做,因为每当您将代码/.h 文件移动到另一台机器或地方时,您都必须对其进行调整。

#include <path/filename.h>

当文件包含在 < 和 > 之间时,将相对于您为编译器提供的包含路径搜索该文件。在你的情况下:

INC= /Desktop/Sysprog/Uebungsblatt6/a4/

$(CC) $(CFLAGS) awesome.c -o -I$(INC) $@

许多编译器使用 -I 开关为其提供标准包含路径。您的编译器可能会有所不同(并且大师可能会提供一些调整,因为我的 Make 生锈了)。


推荐阅读