Here list some makefile as references.

api_service:
        cp -b ~/code/newapi/build/api_service .
 
 
api_service.tar.gz: api_service so_files
        @mkdir -p so_files
        cp api_service so_files
        cd so_files; tar -caf ../$@ *
 
 
CODE_ROOT := ~/code/newapi
LIBPATH := $(CODE_ROOT)/3rd-modules/libs
DEPEND_SO := libodbc.so libunwind.so libtcmalloc.so libbson-1.0.so libmongoc-1.0.so libpq.so
# PACKAGE_SO := $(addprefix so_files/,$(DEPEND_SO))
so_files:
        @mkdir -p so_files
        @for so in $(DEPEND_SO); do \
                tmp=$$(find $(LIBPATH) -type f -name "$$so*" -print); \
                lnk=$$(basename $$tmp | sed 's/\(lib.*\.so\.[0-9]\)\(\.[0-9]\)\+/\1/'); \
                cp $$tmp so_files/$$lnk; \
        done
 
 
runtime_so_alias:
        @for so in $(DEPEND_SO); do \
                tmp=$$(find $(LIBPATH) -type f -name "$$so*" -print); \
                lnk=$$(basename $$tmp | sed 's/\(lib.*\.so\.[0-9]\)\(\.[0-9]\)\+/\1/'); \
                ln -sf $$tmp $$lnk; \
        done
 
clean_so_alias:
        @for so in $(DEPEND_SO); do \
                find -type l -name "$$so*" -exec $(RM) {} \; ; \
        done
 
clean:
        $(RM) api_service
        -$(RM) api_service.tar.gz
        -$(RM) so_files
 
.PHONY: clean clean_so_alias so_files runtime_so_alias

see also 202308261504make基础