多目录编译,自动查找指定目录的cpp文件编译成可执行文件,包括当前目录的cpp。
c++11编译添加-std=c++11即可。
.CFLAGS =-std=c++11 -Wall -g -O2 -pthread
Makefile
src1
src2
include
.
TARGET = xxTest
PWD := $(shell pwd)
SOURCE_DIR := $(shell find $(PWD) -maxdepth 1 -type d)
CXX_SRCS = $(foreach dir, $(SOURCE_DIR), $(wildcard $(dir)/*.cpp))
CXX_SRCS2 = $(patsubst $(PWD)%, .%, $(CXX_SRCS))
CXX_OBJS = $(patsubst %.cpp, %.o, $(CXX_SRCS2))
CC = g++
INCLUDE = -I./include/
LIBS = -lm -ldl -lrt -lpthread
CFLAGS = -Wall -g -O2 -pthread
all:$(TARGET)
@echo "make all finish"
@echo ' '
$(CXX_OBJS):$(CXX_SRCS2)
@echo "Buliding..."
$(CC) $(CFLAGS) -c $(INCLUDE) $< -o $@
@echo 'Finished building: $@'
@echo ' '
$(TARGET):$(CXX_OBJS)
@echo "Link..."
$(CC) -o $@ $^ $(LIBS)
@echo "Link end..."
@echo ' '
clean:
@echo "Clear..."
rm -rf $(CXX_OBJS)
rm -rf $(TARGET)
对于指定文件夹的编译
#CC = gcc
CC = arm-linux-gnueabihf-gcc
INCLUDE = -Iinc -Iplugins -Iplugins/file
LIB=-lpthread
OBJ += $(patsubst %.c, %.o, $(wildcard *.c))
OBJ += $(patsubst %.c, %.o, $(wildcard src/*.c))
OBJ += $(patsubst %.c, %.o, $(wildcard port/*.c))
OBJ += $(patsubst %.c, %.o, $(wildcard easylogger/port/*.c))
OBJ += $(patsubst %.c, %.o, $(wildcard plugins/file/*.c))
CFLAGS = -O0 -g -Wall
target = TestElogDemo
all:$(OBJ)
$(CC) out/*.o -o $(target) $(LIB)
mv $(target) out
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@ $(INCLUDE)
mv $@ out
clean:
rm -rf out/*