我正在为一个大项目编程,所以我和其他人合作。
为了便于管理目录,我的目录如下:

project:
--include (header files from others supplied for me)
--lib (libraries from others supplied for me)
--L3_CVS  (this folder include all my files)
   -- Makefile
   -- sourceFile (all my source files here)
       -- include_private(all header files used only by myself)
       -- appl (all my C files here)

我的Makefile如下:
####################################################
CROSS_COMPILE=/home/powerpc-wrs-linux-gnu/x86-linux2/powerpc-wrs-linux-gnu-ppc_e500v2-glibc_cgl-

EXTRA_CFLAGS += -g

EXTRA_LDFLAGS +=

LIBSB =-Wl,--start-group -ldiag -ldiag_esw -lacl -ldiagcint -lcint -lsal_appl -lsal_appl_editline -lsal_appl_plat\

-lbcm -lbcm_esw -lbcm_common -lfirebolt -ltitan -ltrident -lhumv -lbradley -lherc -ldraco -lscorpion\

-ltriumph -ltrx -ltriumph2 -lenduro -lkatana -lflexctr -lptp -lsoc_esw -lsoc -lsoc_phy -lsoc_mcm\

-lsoccommon -lsoc_shared -lshared -lsal_core -lsal_core_plat -lcustomer -lsoc_nemo -lsoc_clsbuilder\

-lsoc_sal \

-lbcm_compat -lbcm_rpc -lcpudb  -ltrx  -lstktask -llubde -ldrivers -ldiscover -lcputrans \

-lrcu -lpthread -lrt -lm   -Wl,--end-group

LIBS = -ldiag -lrcu

CC = $(CROSS_COMPILE)gcc

LD = $(CROSS_COMPILE)ld

AR = $(CROSS_COMPILE)ar

STRIP = $(CROSS_COMPILE)strip


SRC_PATH := ./SourceFile/appl

HEAD_PATH :=  ./SourceFile/include-private


INC_DIR  =  ../include

LIB_PATH =  ../lib


APP_NAME = L3appl

SRCS := $(wildcard $(SRC_PATH)/*.c)

export $(SRCS)

OBJS:= $(patsubst %.c,%.o,$(SRCS))

%.d: %.c

    @set -e; rm -f $@; \

    $(CC) -MM  $< > $@.$$$$; \

    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \

    rm -f $@.$$$$

sinclude $(SRCS:.c=.d)

INCLUDES = $(wildcard $(HEAD_PATH)/*.h)

$(APP_NAME):$(OBJS)

    $(CC)   -c -I$(INC_DIR) $(SRCS)

    $(CC)   -o  $(APP_NAME) $(OBJS) -L$(LIB_PATH) $(LIBSB)  -lpthread -lrt -lm


.PHONY:clean

clean:

    rm   -f  $(OBJS) $(APP_NAME)
#################################################

我的问题是,当我运行make in terminal时,它总是显示:***没有这样的文件或目录
编译终止。似乎不包括./SourceFile/include private中的.h文件。
但是,实际上,我使用了“INCLUDES=$(通配符$(HEAD_PATH)/*.h)”包含这些.h文件。
我不知道哪里错了!
这是我第一次写makefile。因此,如果我的makefile中有错误,我将非常感谢您指出它们!
非常感谢你的帮助!!!!!!!

最佳答案

您可以尝试更改$(CC) -c -I$(INC_DIR) $(SRCS) to $(CC) -c -I$(INC_DIR) -include $(INCLUDES) $(SRCS)
或$(c c)-c-I$(INC-DIR)$(SRCS)到$(CC)-c-I$(INC-DIR)-I$(INCLUDES)$(SRCS)
其中INCLUDES是./SourceFile/include private(只有目录,没有.h文件)
编辑:通常不必显式地包含.h文件,但第一个更改就是这样做的。第二个更改不会显式地添加.h文件,而是为编译器提供另一个include目录,以便在其中搜索必要的.h文件。
有关更多信息,请参阅GCC man文件。
当做

关于linux - 如何在makefile中包含.h文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9857949/

10-13 05:52