2017-12-04 17 views
0

에서 SRC 파일을 구축 SRC/src.c 로그/log.c메이크 일반적인 규칙은 내가 소스 파일을 OBJ/내 모든 * .o 인 파일을 구축 유지하고 있습니다하려는 여러 폴더

OBJECTS=build/log.o build/src.o 

$(OBJ_DIR)/%.o : src/%.c log/%.c 
     $(CC) $(CFLAGS) $(DEFINE) $(INCLUDE) [email protected] $< 

하지만하지 * .o를 적절한 * .c로 매핑 나는 무엇을 잘못 했는가? 다음과 같이

+0

$ (objdir를)/%를 O를 :. 하나 개의 폴더가있을 때 SRC/% C이 작동합니다. 그러나 여러 폴더에있는 c 파일에 매핑하고 싶습니다. –

+0

VPATH를 사용하여이 작업을 수행 할 수 있습니다. ([here] (https://www.gnu.org/software/make/manual/html_node/General-Search.html) 참조). 나는 메이크 파일이 무엇을하는지 알아내는 것이 더 어렵 기 때문에'VPATH'에 대한 열렬한 팬이 아닙니다. 그러나 그것은 당신이 찾고있는 것을합니다. – HardcoreHenry

+0

VPATH, VPATH = src : log를 시도했는데, 나에게 도움이되지 않았습니다. 다음 파일은 빌드하지 않습니다. VPATH를 추가했을 때 사전 조건을 % .c –

답변

0

당신은 VPATH를 사용할 수 있습니다.

~/tmp8> more Makefile 

OBJECTS=build/log.o build/src.o 
OBJ_DIR=build 

all: $(OBJECTS) 

VPATH=src:log 

$(OBJ_DIR)/%.o: %.c 
     @echo compiling "$< ==> [email protected]" 

~/tmp8> find . -type f 
./src/src.c 
./Makefile 
./log/log.c  

~/tmp8> make 
compiling log/log.c ==> build/log.o 
compiling src/src.c ==> build/src.o 

~/tmp8> 
+0

감사합니다. 폴더 이름을 정렬 한 후에야 이유가 확실하지 않습니다. 내가 가지고있는 버전을 "4.1" –