-BASH-4.0.35$ cat ~/linux/test_c++/Makefile
cc=gcc
CC=g++
LD=ld
OBJ=outcome
LIB=-lc -lpcrecpp -lpthread
CFLAGE= -g3
LDFLAGE=
SRC_DIR=./src/
INC_DIR=-I./include/
INC_LIB=-L./lib/
BIN_DIR=./bin/
SO_DIR=./lib/
SO_OBJ_SRC= ./lib/common.o \
./lib/BigInteger.o\
./lib/bigint.o
SO_OBJ=libcommon.so
A_OBJ=libcommon.a
A_DIR=./lib/
all: clean MKDIR $(BIN_DIR)$(OBJ)
@cp $(BIN_DIR)$(OBJ) ./
@cp $(SO_DIR)$(SO_OBJ) ./
MKDIR:
@[ -d $(SO_DIR) ] || mkdir -p $(SO_DIR)
@[ -d $(BIN_DIR) ] || mkdir -p $(BIN_DIR)
$(BIN_DIR)$(OBJ):$(SO_DIR)main.o $(SO_OBJ_SRC)
# ar cr $(SO_DIR)libcommon.a $(SO_OBJ_SRC)
# $(CC) $(CFLAGE) $(LDFLAFGE) -o $@ $< $(A_DIR)$(A_OBJ)
$(CC) -g -shared -o $(SO_DIR)$(SO_OBJ) $(SO_OBJ_SRC) -lc
$(CC) $(CFLAGE) $(INC_LIB) -lcommon -o $@ $< $(LIB)
$(SO_DIR)%.o:$(SRC_DIR)%.cpp
$(CC) -fPIC $(CFLAGE) $(INC_DIR) -c $< -o $@ $(LIB)
$(SO_DIR)%.o:$(SRC_DIR)%.c
$(cc) -fPIC $(CFLAGE) $(INC_DIR) -c $< -o $@ $(LIB)
clean:
@rm -rf $(SO_DIR)*.o
@rm -rf $(SO_DIR)
@[ ! -f $(SO_DIR)*.so ] || rm -rf $(SO_DIR)*.so
@[ ! -f $(BIN_DIR)$(OBJ) ] || rm $(BIN_DIR)$(OBJ)
@[ ! -d $(BIN_DIR) ] || rm -rf $(BIN_DIR)
@[ ! -d $(SO_DIR) ] || rm -rf $(SO_DIR)
@[ ! -f $(SO_OBJ) ] || rm $(SO_OBJ)
install:
@make -f Makefile
@ cp $(BIN_DIR)* ./
uninstall:
rm ./bin/$(OBJ)
rm $(OBJ)
rm $(SO_DIR)$(SO_OBJ)
rm $(SO_DIR)*
package:
tar cvjf ../test_c++.tar.gz ../test_c++
removepackage:
rm ../test_c++.tar
-BASH-4.0.35$
Here is one of the sample Makefiles in my project.
you may have a check.