现在,是时候在对应目录放入对应文件了:

 /×    foo.h     */

 #ifndef __FOO_H
#define __FOO_H void foo(void) #endif/*__FOO_H*/ /* foo.c */ #include <stdio.h>
#include "foo.h"
void foo(void)
{
printf("This is foo()!\n");
} /* main.c */ #include "foo.h"
int main(void)
{
return 0;
}

执行make后报错:

这是在构建依赖文件时,gcc因为找不到foo.h而报错。那是因为foo.h和foo.c放在不同的目录中,这样需要使用gcc的 -I 选项,指定包含路径,所以,更改后的Makefile如下:

 .PHONY: all clean

 MKDIR = mkdir
RM = rm
RMFLAGS =-rf CC = gcc
AR = ar
ARFLAGS = crs DIR_OBJS = objs
DIR_EXES = $(ROOT)/build/exes
DIR_DEPS = deps
DIR_LIBS = $(ROOT)/build/libs
DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS) $(DIR_LIBS)
RMS = $(DIR_OBJS) $(DIR_DEPS) ifneq ("$(EXE)", "")
EXE := $(addprefix $(DIR_EXES)/, $(EXE))
RMS += $(EXE)
endif ifneq ("$(LIB)", "")
LIB := $(addprefix $(DIR_LIBS)/, $(LIB))
RMS += $(LIB)
endif SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS))
DEPS = $(SRCS:.c=.dep)
DEPS := $(addprefix $(DIR_DEPS)/, $(DEPS)) ifeq ("$(wildcard $(DIR_OBJS))", "")
DEP_DIR_OBJS := $(DIR_OBJS)
endif
ifeq ("$(wildcard $(DIR_EXES))", "")
DEP_DIR_EXES := $(DIR_EXES)
endif
ifeq ("$(wildcard $(DIR_DEPS))", "")
DEP_DIR_DEPS := $(DIR_DEPS)
endif
ifeq ("$(wildcard $(DIR_LIBS))", "")
DEP_DIR_LIBS := $(DIR_LIBS)
endif all: $(EXE) $(LIB) ifneq ($(MAKECMDGOALS), clean)
include $(DEPS)
endif ifneq ("$(INCLUDE_DIRS)", "")
INCLUDE_DIRS := $(strip $(INCLUDE_DIRS))
INCLUDE_DIRS := $(addprefix -I, $(INCLUDE_DIRS))
endif $(DIRS):
$(MKDIR) $@
$(EXE): $(DEP_DIR_EXES) $(OBJS)
$(CC) -o $@ $(filter %.o, $^)
$(LIB): $(DEP_DIR_LIBS) $(OBJS)
$(AR) $(ARFLAGS) $@ $(filter %.o, $^)
$(DIR_OBJS)/%.o: $(DEP_DIR_OBJS) %.c
$(CC) $(INCLUDE_DIRS) -o $@ -c $(filter %.c, $^)
$(DIR_DEPS)/%.dep: $(DEP_DIR_DEPS) %.c
@echo "Creating $@ ..."
@set -e ; \
$(RM) $(RMFLAGS) $@.tmp ; \
$(CC) $(INCLUDE_DIRS) -E -MM $(filter %.c, $^) > $@.tmp ; \
sed 's,\(.*\)\.o[ :]*,objs/\1.o $@: ,g' < $@.tmp > $@ ; \
$(RM) $(RMFLAGS) $@.tmp
clean:
$(RM) $(RMFLAGS) $(RMS)

这样就完成了支持头文件目录指定

最新文章

  1. 完全移除TFS2013的版本控制
  2. 纯手写SpringMVC架构,用注解实现springmvc过程
  3. linux:nohup 不生成 nohup.out的方法
  4. 【Beta版本】冲刺-Day1
  5. zipimport.ZipImportError: can&#39;t decompress data; zlib not available 解决办法
  6. 代码规范[iOS]
  7. Snapchat面经(师兄的)
  8. LeetCode题解——Integer to Roman
  9. C#文件后缀名详解
  10. Lock锁_线程_线程域
  11. 01-资料管理器(Directory/DirectoryInfo操作文件夹类)
  12. [C++程序设计]对“&amp;”和“*”运算符
  13. CSS3制作精美的iphone电话图标,不使用图片
  14. C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数
  15. Android Stutio 3.0 - Gradle sync failed
  16. [PA 2014]Lustra
  17. Django-Oscar小记:如何使用高版本Django开发网页的SEO模块
  18. Python入门-三级菜单
  19. FileZilla:425 Can&#39;t open data connection for transfer of解决办法
  20. opengl学习,一篇就够你基本了解

热门文章

  1. 小课堂week17 编程范式巡礼第二季 并发那些事
  2. Ubuntu挂载samba共享目录
  3. Windows 批处理 ping 某个网段
  4. 如何用代码方式获取Web.config中system.serviceModel/client节点的address
  5. 吐槽win7
  6. zend studio 13.0.0 安装破解汉化
  7. 北京SAP-AGS CoE support consultant intern 面试总结
  8. C#基础视频教程5.2 如何编写简单的超级热键
  9. [置顶] 深入浅出Spring(四) Spring实例分析
  10. HDU4300-Clairewd’s message(KMP前缀匹配后缀)