您的位置:首页 > 其它

使用Makefile构建工程

2014-09-18 16:23 387 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: