为什么我的程序源文件里不能包含内核头文件?
编写了一个内核程序,想先生成.o文件,然后再连接到其他文件生成.ko文件。
下面一层(这一层可以包含内核头文件)把linux内核中提供的函数做了封装,这一层只是对下面一层调用,现在想改一下,让本层直接用内核提供的函数,但一在源文件里加上包含内核头文件的语句(像#include <linux/sched.h> ),就提示找不到sched.h这个文件。估计是Makefile的问题,请大家帮忙看一下:
Makefile
---------------------------------------
#source file
SUBDIRS :=
SUBDIRS := abc
SUBDIRS := abcd
SUBDIRS := abcde
AD_SRC := $(foreach subdir, $(SUBDIRS), $(wildcard $(subdir)/*.c))
#obj files
AD_OBJ := $(AD_SRC:.c=.o)
#dependecy files
AD_DEP := $(AD_SRC:.c=.d)
#final target
LIB_DIRS = $(CURDIR)/../lib
LIB_NAME = ad.o
#rules to make the objs
CC = gcc
LD = ld
MV = mv
CFLAGS :=
CFLAGS := -I $(CURDIR)/h
CFLAGS := -I $(CURDIR)/../h
CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -fomit-frame-pointer -g -Wdeclaration-after-statement -pipe -msoft-float -m32 -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=i686 -mregparm=3
LDFLAGS :=
LDFLAGS += -r
%.o : %.c
@$(CC) -M -MT $*.o -c $(CFLAGS) $ < -o $*.d
@$(CC) -c $(CFLAGS) $ < -o $@
#final target
all: $(AD_OBJ)
@$(LD) $(LDFLAGS) -o $(LIB_NAME) $(AD_OBJ)
$(MV) $(LIB_NAME) $(LIB_DIRS)/$(addsuffix _shipped, $(LIB_NAME))
clean:
rm -f $(AD_OBJ)
rm -f $(AD_DEP)
#The dependent file can be include only when the target is NOT "clean "
ifeq( , $(findstring clean, $(MAKECMDGOALS)))
-include $(AD_DEP)
endif
---------------------------------
------解决方案--------------------请指定内核源代码目录