使用Makefile构建工程

1、工程目录如下

/root/myproject/
|-- Makefile
|-- bin
|-- include
|-- lib
|-- libtest
|   `-- src
|       |-- Makefile
|       |-- libtest.cpp
|       `-- libtest.h
`-- test
    |-- include
    |   `-- test.h
    `-- src
        |-- Makefile
        `-- test.cpp

2、编写Makefile

1)myproject下的 Makefile

PROJECT_ROOT_PATH = /root/myproject

MFLAGS = "CFLAGS=-w"
DFLAGS = "CFLAGS=-w -g -fPIC -DDEBUG -DREENTRANT"

all :
	cd $(PROJECT_ROOT_PATH)/libtest/src && $(MAKE) $(DFLAGS) TARGET_SO=1 && $(MAKE) install TARGET_SO=1
	cd $(PROJECT_ROOT_PATH)/test/src && $(MAKE) $(DFLAGS) && $(MAKE) install

clean :
	cd $(PROJECT_ROOT_PATH)/libtest/src && $(MAKE) clean TARGET_SO=1
	cd $(PROJECT_ROOT_PATH)/test/src && $(MAKE) clean
2)libtest/src下的 Makefile

LIB_NAME = libtest

PROJECT_ROOT_PATH = /root/myproject

ifdef TARGET_SO
TARGET = $(LIB_NAME).so
endif

ifdef TARGET_AR
TARGET = $(LIB_NAME).a
endif

CXXSRCS	= $(wildcard *.cpp)
CXXOBJS = $(patsubst %.cpp,%.o, $(CXXSRCS))

CXX = g++
AR = ar
ARFLAGS = -rv
SOFLAGS = -fPIC -shared
INCPATH = -I.
LDFLAGS = -L.
LIBS =  

ifdef TARGET_SO
$(TARGET): $(CXXOBJS)
	$(CXX) $(SOFLAGS) $^ -o $@ $(LDFLAGS) $(LIBS)
endif

ifdef TARGET_AR
$(TARGET):$(CXXOBJS)
	$(AR) $(ARFLAGS) $@ $^
endif

$(CXXOBJS): %.o: %.cpp
	$(CXX) $(INCPATH) $(CFLAGS) -c $< -o $@
	
.PHONY: install
install:
	cp $(TARGET) $(PROJECT_ROOT_PATH)/lib
	mkdir -p $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
	cp *.h $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
	
.PHONY: clean
clean:
	-rm -rf $(CXXOBJS)
	-rm -rf $(TARGET)
	-rm -rf $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
	-rm -rf $(PROJECT_ROOT_PATH)/lib/$(TARGET)

3) test/src下的Makefile

EXE_NAME = test

PROJECT_ROOT_PATH = /root/myproject

CXXSRCS	= $(wildcard *.cpp)
CXXOBJS = $(patsubst %.cpp,%.o, $(CXXSRCS))

CXX = g++
INCPATH = -I../include -I$(PROJECT_ROOT_PATH)/include
LDFLAGS = -L$(PROJECT_ROOT_PATH)/lib
LIBS = -ltest

$(EXE_NAME): $(CXXOBJS)
	$(CXX) $^ -o $@ $(LDFLAGS) $(LIBS)

$(CXXOBJS): %.o: %.cpp
	$(CXX) $(INCPATH) $(CFLAGS) -c $< -o $@
	
.PHONY: install
install:
	cp $(EXE_NAME) $(PROJECT_ROOT_PATH)/bin

.PHONY: clean
clean:
	-rm -rf $(CXXOBJS)
	-rm -rf $(EXE_NAME)
	-rm -rf $(PROJECT_ROOT_PATH)/bin/$(EXE_NAME)

3、构建工程

在/root/myproject下执行
make all
make clean


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值