makefile 條件判斷用法和 自定函式用法簡單記錄

洪大宇發表於2020-12-30
.PHONY:all clean

common_src= ptp_raw.c
axi_bus_src= axi_bus.c
lib=libfpga.a
axi_obj=$(axi_bus_src:.c=.o)
ptp_src= $(common_src) ptpd.c ptp_timer.c
ptp_obj=$(ptp_src:.c=.o)
lib_src=fpga_axi.c
lib_obj=$(lib_src:.c=.o)

ptp=ptpd
axi_bus=fpga

ifeq ($(CC),cc)
	CC := gcc
	AR := ar
endif

# ifeq ($(SHELL),/bin/sh)
#     SHELL:=/bin/bash
# endif

ifneq ($(SHELL),/bin/bash)
	status=no
endif

define test
	echo $(1)
endef

all: $(lib) $(ptp) $(axi_bus)

$(lib): $(lib_obj)
ifdef status 
	$(call test,$(status))
endif
	$(AR) -cr $@ $(filter %.o,$^) 
$(lib_obj):$(lib_src)
	$(CC) -Wall -Werror $(filter %.c,$^) -c

$(ptp):$(ptp_obj)
	$(CC) -Wall -Werror -L./  $(filter %.o,$^) -o $@ -lfpga

$(axi_bus):$(axi_obj)
	$(CC) -Wall -Werror -L./  $(filter %.o,$^) -lfpga  -o $@

.c.o:
	$(CC) -Wall -Werror -L./  $(filter %.c,$^) -lfpga  -c

tags:
	ctags -R
	cscope -Rbq

clean:
	rm -rf  $(axi_bus) $(ptp) $(axi_obj) $(ptp_obj) $(lib) $(lib_obj) tags cscope*

相關文章