как включить документ .h в makefile

Я программирую для большого проекта, поэтому сотрудничаю с другими. Чтобы упростить управление каталогом, мой каталог выглядит следующим образом:

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 в терминале, он всегда показывает: *** Компиляция такого файла или каталога не завершена. что кажется, что файлы .h в ./SourceFile/include-private не включены.

Но на самом деле я использовал «INCLUDES = $(wildcard $(HEAD_PATH)/*.h)» для включения этих файлов .h.

Я не знаю, где не так!

это мой первый раз, когда я пишу makefile. Поэтому, если в моем make-файле есть ошибки, я был бы признателен, если бы вы указали на них!

большое спасибо за помощь!!!!!!!


person city    schedule 25.03.2012    source источник


Ответы (2)


Вы можете попробовать изменить $(CC) -c -I$(INC_DIR) $(SRCS) to $(CC) -c -I$(INC_DIR) -include $(INCLUDES) $(SRCS)

или $(CC) -c -I$(INC_DIR) $(SRCS) в $(CC) -c -I$(INC_DIR) -I$(INCLUDES) $(SRCS), где INCLUDES — это ./SourceFile/include-private (только каталог, без файлов .h)

Редактировать: обычно вам не нужно явно включать файлы .h, но это то, что делает первое изменение. Второе изменение не добавляет файлы .h явно, а предоставляет компилятору другой каталог включения, в котором он может искать необходимые файлы .h.

Обратитесь к справочному файлу GCC для получения дополнительной информации.

С Уважением

person grifos    schedule 25.03.2012
comment
Попробуйте: $(CC) -include $(INCLUDES) -c -I$(INC_DIR) $(SRCS), кажется, я перепутал порядок параметров - person grifos; 25.03.2012
comment
$(CC) -c -I$(INC_DIR) -I$(INCLUDES) -I$(HEAD_PATH) $(SRCS) с файлом .h, включенным в файл .c, отвечающий на ваш stackoverflow. com/questions/9865965/ - person grifos; 26.03.2012

У вас должно быть что-то вроде

 CFLAGS = -Wall $(OPTIMFLAGS) $(INCLUDEFLAGS)
 INCLUDEFLAGS = -I $(INC_DIR) -I $(HEAD_PATH)
 OPTIMFLAGS = -g -O

Вы можете использовать remake для отладки Makefile.

person Basile Starynkevitch    schedule 25.03.2012
comment
Затем используйте remake -x для отладки вашего Makefile. - person Basile Starynkevitch; 25.03.2012