這個是整個工程的目錄樹,想將fun下生成的.o檔案放在obj/fun下,main.o放在obj/main下

目前遇到的編譯問題是在fun目錄下僅有一個.c檔案的話,編譯是可以的,但是有多個.c的話,只會編譯生成一個.o檔案,感覺是fun下的makefile 有問題
總的Makefile
#定義gcc
CC := gcc
CFLAGS = -g -O -Wall -pthread
SUBDIRS := main src obj
INCDIR := -I$(shell pwd)/src/fun/inc
PRJDIR := $(shell pwd)
BIN_DIR := bin
BIN := my_app
OBJS_DIR := obj
RM := rm
export CC OBJS_DIR BIN_DIR BIN INCDIR PRJDIR LIB
all:check_bin compile_src
check_bin:
echo $(PWD)
mkdir -p $(BIN_DIR) $(LIB)
compile_src:
@set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done
.PHONY:clean cleanall
clean:
$(RM) -rf $(OBJS_DIR)/*.o $(OBJS_DIR)/**/*.o
cleanall:
$(RM) -rf $(OBJS_DIR)/*.o $(OBJS_DIR)/**/*.o $(BIN_DIR)/$(BIN)
src下的Makefile
SUBDIRS := fun
all:compile_src
compile_src:
@set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done
fun下的Makefile
SRC:= $(wildcard **/*.c)
OBJS:=$(addprefix $(PRJDIR)/$(OBJS_DIR)/fun/, $(patsubst %.c,%.o,$(notdir $(SRC))))
$(OBJS):$(SRC)
@mkdir -p $(PRJDIR)/$(OBJS_DIR)/fun
$(CC) $(INCDIR) -c $< -o $@
感覺$(OBJS):$(SRC) 這個編譯是不對的, 改成
$(PRJDIR)/$(OBJS_DIR)/fun/%.o:src/%.c
也依然不正確,請教下此處該如何撰寫
uj5u.com熱心網友回復:
需在fun下的makefile中添加 目標依賴compile_src:$(OBJS)
uj5u.com熱心網友回復:
%.o:%.c$(CC) $(INCDIR) -c $< -o $(PRJDIR)/$(OBJS_DIR)/fun/$@
fun下Makefile。改成這樣試下。命令CC前要頂格加<TAB>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/236177.html
標籤:應用程序開發區
