makefile编译静态、动态库

创建目录及文件

mkdir server_test
cd server_test
mkdir xserver
mkdir xthread
mkdir xcom

cd xthread
vim xthread.h
vim xthread.cpp
vim makefile
#生成动态链接库libxthread.so
make

cd ../xserver
vim xserver.cpp
vim makefile
#会影响其他库,只当前会话测试使用
export LD_LIBRARY_PATH=../xthread
./server

xthread.h

#ifndef DEMO_XTHREAD_H
#define DEMO_XTHREAD_H

#include <thread>

class XThread {
public:
    virtual void Start();

    virtual void Wait();

private:
    virtual void Main() = 0;
    std::thread th_;
};


#endif //DEMO_XTHREAD_H

xthread.cpp

#include "xthread.h"
#include <iostream>
using namespace std;

void XThread::Start() {
    cout << "Start Thread" << endl;
    th_ = std::thread(&XThread::Main, this);
}

void XThread::Wait() {
    cout << "begin wait Thread" << endl;
    th_.join();
    cout << "end wait Thread" << endl;
}

xthread/makefile

TARGET=libxthread.so
OBJS=xthread.o
LDFLAGS=-shared
CXXFLAGS=-fPIC
LIBS=-pthread
$(TARGET):$(OBJS)
        $(CXX) -std=c++11 $(LIBS) $(LDFLAGS) $^ -o $@
clean:
        $(RM) $(TARGET) $(OBIS)

.PHONY: clean

xserver.cpp

#include <iostream>
#include "xthread.h"
using namespace std;

class XTask:public XThread {
    void Main() override {
        cout << "XTask main" << endl;
    }
};

int main() {
    cout << "XServer" << endl;
    XTask task;
    task.Start();
    task.Wait();
}

xserver/makefile

TARGET=xserver
OBJS=xserver.o
CXXFLAGS=-std=c++11 -I../xthread
LDFLAGS=-L../xthread
LIBS=-lxthread
$(TARGET):$(OBJS)
        $(CXX) -std=c++11 $^ -o $@ $(LDFLAGS) $(LIBS)
clean:
        $(RM) $(TARGET) $(OBJS)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容