2017-12-18 22 views
0

안녕하세요 저는 C++ 프로젝트를 빌드하려고합니다. 나는 현재 만들고 싶은 .o 파일의 모든 이름을 나열하는 makefile을 가지고있다. 그런 다음 내가 컴파일되도록 디렉토리에 접두사를 붙입니다. 마지막으로 각 객체 파일을 작성한 다음 해당 객체 파일에서 실행 파일을 만드는 두 가지 기본 규칙이 있습니다. 어떤 이유로 든 make는 패턴을 인식하지 못합니다.패턴을 기반으로 오브젝트 파일을 만드는 규칙이 없습니다.

make: *** No rule to make target /home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/zynq_demo.o', needed by /home/epi/jfrye_xilinx/Cosimulation/Adder_PL/bin/zynq_demo'. Stop.

네 번째 규칙은 zynq_demo.o 올바른 처리를해야 다음은 메이크

CXX=g++ 
SRC_DIR=/home/epi/jfrye_xilinx/Cosimulation/SystemC/Xilinx/lib 
INC_DIR=-I/home/epi/jfrye_xilinx/Cosimulation/SystemC/Xilinx/include 
INC_DIR += -I/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/include 

LIB_DIR=-L/home/epi/jfrye_xilinx/SystemC/system-2.3.2/lib-linux64 
LIB_TAGS=-lsystemc 

OBJ_DIR=/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj 

ZYNQ_DEMO=/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/bin/zynq_demo 
ZYNQMP_DEMO=/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/bin/zynqmp_demo 

OBJS+ = memory.o trace.o debugdev.o demo-dma.o xilinx-zynq.o xilinx-zynqmp.o 
OBJS += safeio.o remote-port-proto.o remote-port-sk.o remote-port-tlm.o 
OBJS += remote-port-tlm-memory-master.o remote-port-tlm-memory-slave.o 
OBJS += remote-port-tlm-wires.o 

_ZYNQ_OBJS=zynq_demo.o 
_ZYNQMP_OBJS=zynqmp_demo.o 

_ZYNQ_OBJS += $(OBJS) 
_ZYNQMP_OBJS += $(OBJS) 

ZYNQ_OBJS=$(addprefix $(OBJ_DIR)/, $(_ZYNQ_OBJS)) 
ZYNPMP_OBJS=$(addprefix $(OBJDIR)/, $(_ZYNQMP_OBJS)) 

$(info $(ZYNQ_OBJS)) 

all: $(ZYNQ_DEMO) $(ZYNQMP_DEMO) 

$(ZYNQ_DEMO): $(ZYNQ_OBJS) 

$(ZYNQMP_DEMO): $(ZYNQMP_OBJS) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc 
    $(CXX) $(INC_DIR) $(LIB_DIR) $(LIB_TAGS) -c -o [email protected] $< 

내가 오류를 얻고있다에게 있습니다. 객체 파일을 빌드하는 데 사용할 수있는 규칙을 인식하지 못하는 이유는 무엇입니까?

+1

더 쉬운 방법은'$ (vpath)'를 사용하고 소스 디렉토리를 명시 적으로 지정하지 않는 것입니다. – user0042

+2

소스 디렉토리'/ home/epi/jfrye_xilinx/Cosimulation/SystemC/Xilinx/lib'에 해당 .cc 파일이 있습니까? –

+0

아니요, 그게 문제였습니다. 목록에서 목표 파일 이름을 찾을 수있을지라도 규칙이 없다는 것에 대해 불평 할 것이라는 것을 알지 못했습니다. –

답변

0

저는 패턴 규칙의 팬이 아닙니다. 그들이 적용되는시기와 장소는 내 취향에 약간의 위험이 따릅니다. 더 나은 대안 IMHO는 static pattern rules입니다. 이들을 사용하려면 패턴 규칙 앞에 해당 패턴이 적용되는 대상을 붙이기 만하면됩니다.

그래서

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc 
    $(CXX) $(INC_DIR) $(LIB_DIR) $(LIB_TAGS) -c -o [email protected] $< 

간단하게

${ZYNC_OBJS}: $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc 
    $(CXX) $(INC_DIR) $(LIB_DIR) $(LIB_TAGS) -c -o [email protected] $< 

내가 을 소스 트리를 가지고 있지 않지만 나는 지금 당신에게 다른 오류를 줄 것이다 만들 생각하기 때문에 내가 말할 수 없습니다 . 뭔가 약 /home/epi/jfrye_xilinx/Cosimulation/SystemC/Xilinx/lib/zynq_demo.cc (아마도) 누락되었습니다.