先放在这里,后面再进行整理和优化
主makefile
CC = gcc
XX = g++
CFLAGS = -W -O0 -fPIC
target = ./run_test
#放置头文件路径
includes = -I ./ \
-I ../ \
-I ./include \
#放置cpp的路径加在这儿
user_dir = ./ \
./src
#静态库和动态库路径放这儿
lib_path = -L ./ \
-L ../ \
-L ./lib
#link lib.a file
lib = -lpthread \
INCLUDE := $(includes)
files = $(foreach d, $(user_dir), $(wildcard $(d)/*.cpp))
objects = $(patsubst %.cpp, %.o, $(files))
$(target) : $(objects)
$(XX) $^ -o $@ $(lib_path) $(lib)
%.o : %.cpp
$(XX) $(CFLAGS) $(includes) -c $^ -g -o $@ -DLinux
clean :
rm -rf $(target)
rm -rf $(objects)
这个是makefile的rule.make
这个是每个模块使用的obj.make
示例
#target: prerequisites
# command
CC = gcc
XX = g++
CFLAGS_STATIC_LIB =
CFLAGS = -lpthread -pthread
CFLAGS += -Wall -Wextra -Werror -Wunused -Wunreachable-code -Wformat-security
target := myhsm
user_dir = .
includes = -I ./libhsm/include
lib = -lhsm
lib_path = -L ./libhsm/
c_src_files = $(foreach d, $(user_dir), $(wildcard $(d)/*.c))
c_objects = $(patsubst %.c, %.o, $(c_src_files))
cpp_src_files = $(foreach d, $(user_dir), $(wildcard $(d)/*.cpp))
cpp_objects = $(patsubst %.cpp, %.o, $(cpp_src_files))
objects = $(c_objects)
all: $(target)
$(target): $(objects)
make -C libhsm/ M=$(PWD)
$(CC) $^ -o $@ $(lib_path) $(lib)
#$(XX) $^ -o $@ $(lib_path) $(lib)
%.o : %.c
$(CC) $(CFLAGS) $(includes) -c $^ -g -o $@ -DLinux
%.o : %.cpp
$(XX) $(CFLAGS) $(includes) -c $^ -g -o $@ -DLinux
.phony: clean
clean:
make -C libhsm/ clean M=$(PWD)
-rm -rfv $(target)
-rm -rfv $(objects)