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 中。
My awesome.c
is in directory a4
, awesome.h
is in directory awesome2
and awesome3
, 我想编译awesome.c
,但如果我编译它没有找到awesome.h
。我怎样才能让它工作。
解决方案
您需要在 .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 生锈了)。
推荐阅读
- sqlite - MediaWiki 在尝试从安装到 docker conainer 的 sqlite db 中读取时引发 DBTransactionStateError
- hadoop - Hadoop 2.7.2 中的 TestDFSIO
- jquery - jQuery - animate().css() 完成
- python - 如何制作具有并行运行命令行工具的功能的python模块(不使用 if __name__ == '__main__': 所以它是可导入的)?
- python - sum函数如何在python中使用for循环
- reactjs - 反应状态:更新数组对象的索引而不显式指定键
- java - 如果我将 Mock 值设为私有,Mockito 是否需要使用反射?
- python - 抓取一些 Facebook 数据但不是全部?Scrapy/Splash/Python
- php - Laravel - 如何添加另一个联接以获取多个表
- php - 根据记录总数显示 owl-carousel 滑块?