很久之前需要自己写几个库,但是每次敲命令感觉很麻烦,所以参考其他开源库的makefile自己写了一个专门生成动态库和静态库的makefile。

之后有一段时间很忙就没有分享出来,中间项目也被停滞了一段时间,昨天又开始一个新项目,恰好也需要编译动态库,就用之前的makefile改了改,发现确实好用,所以趁着没有忘记都是什么东西之前赶紧分享出来。

首先是我要编译的东西的目录结构

linux@ubuntu:~/share/rtbuslib$ tree
.
├── includes
│   └── rt_bus.h
├── Makefile
├── rt_bus_cli.c
└── rt_bus_ser.c1 directory, 4 files

然后是Makefile讲解,如果不想看,可以直接复制后面的代码修改使用。

#记住当前工程的根目录路径
ROOT_DIR=$(shell pwd)
## 需要使用的库添加在这里,但是也可以不写,因为编译库的时候并不查找依赖函数是否存在,只有在调用时才去查找个人建议不要填写,但是运行时需要保证系统能够找到所依赖的库文件
LIBS :=
#LIBS :=pthread nanomsg msg_queue
#使用的库目录,静态库和动态库添加在这里,这里与上面的关系一样,完全可以不写
LIBRARY_PATH :=$(ROOT_DIR)/../msg_queuelib/lib /home/linux/work/nanomsg/lib
## 头文件路径,如果使用了其他库的头文件务必写入进去,否则编译时会报错,找不到文件
INCLUDE_PATH := $(ROOT_DIR)/includes/ $(ROOT_DIR)/../msg_queuelib/includes/msg_queue /home/linux/work/nanomsg/include
## 获取所有头文件路径,也就是将上边的路径前面加上"-I"
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))
## 获取所有的库文件路径,也就是将上边的路径加上"-L"
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))
## 获取所有的库文件,就是在前边加上"-l"
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))

#编译选项,做嵌入式的都明白

#CC=arm-linux-gcc
CC=gcc

#需要生成的.o文件,如果需要同时生成多个库文件可以写多个,后面会放一个生成多个库文件的Makefile

RTBUS_OBJ = rt_bus_ser.o rt_bus_cli.o

#生成库文件名

RTBUS_LIBNAME = librtbus

#库文件版本

LIBVERSION = 1.0.0

#2级软连接文件小版本
RTBUS_SOVERSION = 1

#安装库文件路径,这里我是临时安装,正常应该安装在系统库路径下

PREFIX ?= /home/linux/share/rtbuslib

#头文件安装路径文件夹
PREFIX_INCLUDE_PATH ?= includes/rtbus

#库文件安装文件夹
PREFIX_LIBRARY_PATH ?= lib

#此处连接使用,无续修改

INSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_INCLUDE_PATH)
INSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_LIBRARY_PATH)

#安装库文件时使用的指令

INSTALL ?= cp -a

#下面是编译时做的一些判断和编译选项

# validate gcc version for use fstack-protector-strong
MIN_GCC_VERSION = "4.9"
GCC_VERSION := "`gcc -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"
    CFLAGS += -fstack-protector-strong
else
    CFLAGS += -fstack-protector
endif

R_CFLAGS = -fPIC -Wall -O0 $(CFLAGS)

uname := $(shell sh -c 'uname -s 2>/dev/null || echo false')

#library file extensions

#库文件后缀
SHARED = so
STATIC = a

## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
ifeq (Darwin, $(uname))
    SHARED = dylib
endif

#生成库文件名的一些字符连接,如果需要同时生成多个,需要写多个

#rtbus library names
RTBUS_SHARED = $(RTBUS_LIBNAME).$(SHARED)
RTBUS_SHARED_VERSION = $(RTBUS_LIBNAME).$(SHARED).$(LIBVERSION)
RTBUS_SHARED_SO = $(RTBUS_LIBNAME).$(SHARED).$(RTBUS_SOVERSION)
RTBUS_STATIC = $(RTBUS_LIBNAME).$(STATIC)

#下面是通用命令

#SHARED_CMD = $(CC) -shared -o

.PHONY: all shared static clean install

all: shared static

#动态库和静态库的连接条件,如果需要同时生成多个,需要写多个

shared: $(RTBUS_SHARED)

static: $(RTBUS_STATIC)

.c.o:
    $(CC) -c $(R_CFLAGS) $< -o $@

#静态库的编译命令,如果需要同时生成多个,需要写多个

#static libraries
#rtbus
$(RTBUS_STATIC): $(RTBUS_OBJ)
    $(AR) rcs $@ $^

#动态库的编译命令,如果需要同时生成多个,需要写多个

#shared libraries .so.1.0.0
#rtbus
$(RTBUS_SHARED_VERSION): $(RTBUS_OBJ)
    $(CC) -shared -o $@ $^ $(LDFLAGS)

#生成库的.c文件,如果需要同时生成多个,需要写多个

#objects
#rtbus
$(RTBUS_OBJ): rt_bus_ser.c rt_bus_cli.c

#库文件软连接设置

#links .so -> .so.1 -> .so.1.0.0
#rtbus
$(RTBUS_SHARED_SO): $(RTBUS_SHARED_VERSION)
    ln -s $(RTBUS_SHARED_VERSION) $(RTBUS_SHARED_SO)
$(RTBUS_SHARED): $(RTBUS_SHARED_SO)
    ln -s $(RTBUS_SHARED_SO) $(RTBUS_SHARED)

#make 安装命令,如果需要同时生成多个,需要写多个

#install
#rtbus
install-rt_bus:
    mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)
    $(INSTALL) includes/rt_bus.h $(INSTALL_INCLUDE_PATH)
    $(INSTALL) $(RTBUS_SHARED) $(RTBUS_SHARED_SO) $(RTBUS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
    $(INSTALL) $(RTBUS_STATIC) $(INSTALL_LIBRARY_PATH)

install: install-rt_bus

#make 卸载安装命令,如果需要同时生成多个,需要写多个

#uninstall
#rtbus
uninstall-rt_bus:
    $(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED)
    $(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED_VERSION)
    $(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED_SO)
    $(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_STATIC)
    $(RM) $(INSTALL_INCLUDE_PATH)/rt_bus.h

uninstall: uninstall-rt_bus

#make 清除命令,如果需要同时生成多个,需要写多个

clean:
    $(RM) *.o #delete object files
    $(RM) $(RTBUS_SHARED) $(RTBUS_SHARED_VERSION) $(RTBUS_SHARED_SO) $(RTBUS_STATIC) #delete rt_bus

以上就是Makefile文件,运行之后如下:

linux@ubuntu:~/share/rtbuslib$ make
gcc -c -fPIC -Wall -O0  -I/home/linux/share/rtbuslib/includes/  -I/home/linux/share/rtbuslib/../msg_queuelib/includes/msg_queue  -I/home/linux/work/nanomsg/include -fstack-protector rt_bus_ser.c -o rt_bus_ser.o
gcc -c -fPIC -Wall -O0  -I/home/linux/share/rtbuslib/includes/  -I/home/linux/share/rtbuslib/../msg_queuelib/includes/msg_queue  -I/home/linux/work/nanomsg/include -fstack-protector rt_bus_cli.c -o rt_bus_cli.o
gcc -shared -o librtbus.so.1.0.0 rt_bus_ser.o rt_bus_cli.o
ln -s librtbus.so.1.0.0 librtbus.so.1
ln -s librtbus.so.1 librtbus.so
ar rcs librtbus.a rt_bus_ser.o rt_bus_cli.o
linux@ubuntu:~/share/rtbuslib$ tree
.
├── includes
│   └── rt_bus.h
├── librtbus.a
├── librtbus.so -> librtbus.so.1
├── librtbus.so.1 -> librtbus.so.1.0.0
├── librtbus.so.1.0.0
├── Makefile
├── rt_bus_cli.c
├── rt_bus_cli.o
├── rt_bus_ser.c
└── rt_bus_ser.o1 directory, 10 files

安装后如下:

linux@ubuntu:~/share/rtbuslib$ make install
mkdir -p /home/linux/share/rtbuslib/lib /home/linux/share/rtbuslib/includes/rtbus
cp -a includes/rt_bus.h /home/linux/share/rtbuslib/includes/rtbus
cp -a librtbus.so librtbus.so.1 librtbus.so.1.0.0 /home/linux/share/rtbuslib/lib
cp -a librtbus.a /home/linux/share/rtbuslib/lib
linux@ubuntu:~/share/rtbuslib$ tree
.
├── includes
│   ├── rtbus
│   │   └── rt_bus.h
│   └── rt_bus.h
├── lib
│   ├── librtbus.a
│   ├── librtbus.so -> librtbus.so.1
│   ├── librtbus.so.1 -> librtbus.so.1.0.0
│   └── librtbus.so.1.0.0
├── librtbus.a
├── librtbus.so -> librtbus.so.1
├── librtbus.so.1 -> librtbus.so.1.0.0
├── librtbus.so.1.0.0
├── Makefile
├── rt_bus_cli.c
├── rt_bus_cli.o
├── rt_bus_ser.c
└── rt_bus_ser.o3 directories, 15 files

下面放上原始文件

#记住当前工程的根目录路径
ROOT_DIR=$(shell pwd)
## need libs, add at here
LIBS :=
#LIBS :=pthread nanomsg msg_queue
#使用的库目录,静态库和动态库添加在这里
LIBRARY_PATH :=
#LIBRARY_PATH :=$(ROOT_DIR)/../msg_queuelib/lib /home/linux/work/nanomsg/lib
## used headers  file path
INCLUDE_PATH := $(ROOT_DIR)/includes/ $(ROOT_DIR)/../msg_queuelib/includes/msg_queue /home/linux/work/nanomsg/include
## get all include path
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))
## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))
## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))#CC=arm-linux-gcc
CC=gccRTBUS_OBJ = rt_bus_ser.o rt_bus_cli.oRTBUS_LIBNAME = librtbusLIBVERSION = 1.0.0
RTBUS_SOVERSION = 1PREFIX ?= /home/linux/share/rtbuslib
PREFIX_INCLUDE_PATH ?= includes/rtbus
PREFIX_LIBRARY_PATH ?= libINSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_INCLUDE_PATH)
INSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_LIBRARY_PATH)INSTALL ?= cp -a# validate gcc version for use fstack-protector-strong
MIN_GCC_VERSION = "4.9"
GCC_VERSION := "`gcc -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"CFLAGS += -fstack-protector-strong
elseCFLAGS += -fstack-protector
endifR_CFLAGS = -fPIC -Wall -O0 $(CFLAGS)uname := $(shell sh -c 'uname -s 2>/dev/null || echo false')#library file extensions
SHARED = so
STATIC = a## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
ifeq (Darwin, $(uname))SHARED = dylib
endif#rtbus library names
RTBUS_SHARED = $(RTBUS_LIBNAME).$(SHARED)
RTBUS_SHARED_VERSION = $(RTBUS_LIBNAME).$(SHARED).$(LIBVERSION)
RTBUS_SHARED_SO = $(RTBUS_LIBNAME).$(SHARED).$(RTBUS_SOVERSION)
RTBUS_STATIC = $(RTBUS_LIBNAME).$(STATIC)#SHARED_CMD = $(CC) -shared -o.PHONY: all shared static clean installall: shared staticshared: $(RTBUS_SHARED)static: $(RTBUS_STATIC).c.o:$(CC) -c $(R_CFLAGS) $< -o $@#static libraries
#rtbus
$(RTBUS_STATIC): $(RTBUS_OBJ)$(AR) rcs $@ $^#shared libraries .so.1.0.0
#rtbus
$(RTBUS_SHARED_VERSION): $(RTBUS_OBJ)$(CC) -shared -o $@ $^ $(LDFLAGS)#objects
#rtbus
$(RTBUS_OBJ): rt_bus_ser.c rt_bus_cli.c#links .so -> .so.1 -> .so.1.0.0
#rtbus
$(RTBUS_SHARED_SO): $(RTBUS_SHARED_VERSION)ln -s $(RTBUS_SHARED_VERSION) $(RTBUS_SHARED_SO)
$(RTBUS_SHARED): $(RTBUS_SHARED_SO)ln -s $(RTBUS_SHARED_SO) $(RTBUS_SHARED)#install
#rtbus
install-rt_bus:mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)$(INSTALL) includes/rt_bus.h $(INSTALL_INCLUDE_PATH)$(INSTALL) $(RTBUS_SHARED) $(RTBUS_SHARED_SO) $(RTBUS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)$(INSTALL) $(RTBUS_STATIC) $(INSTALL_LIBRARY_PATH)install: install-rt_bus#uninstall
#rtbus
uninstall-rt_bus:$(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED)$(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED_VERSION)$(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_SHARED_SO)$(RM) $(INSTALL_LIBRARY_PATH)/$(RTBUS_STATIC)$(RM) $(INSTALL_INCLUDE_PATH)/rt_bus.huninstall: uninstall-rt_busclean:$(RM) *.o #delete object files$(RM) $(RTBUS_SHARED) $(RTBUS_SHARED_VERSION) $(RTBUS_SHARED_SO) $(RTBUS_STATIC) #delete rt_bus

下面放一个同时生成多个库的Makefile

## need libs, add at here
LIBS := pthread
#使用的库目录,静态库和动态库添加在这里
LIBRARY_PATH :=
## used headers  file path
INCLUDE_PATH := includes/
## get all include path
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))
## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))
## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))CC=arm-linux-gcc
#CC=gccNLOG_OBJ = RTlog.o exception.o
NIPC_OBJ = message_queue.o semaphore.o
NDRIVER_OBJ = driver_nick.o
NLINUX_SYS_OBJ = linux_sys_nick.oNLOG_LIBNAME = libnlog
NIPC_LIBNAME = libnipc
NDRIVER_LIBNAME = libndriver
NLINUX_SYS_LIBNAME = libnlinux_sysLIBVERSION = 0.9.0
NLOG_SOVERSION = 1
NIPC_SOVERSION = 1
NDRIVER_SOVERSION = 1
NLINUX_SYS_SOVERSION = 1PREFIX ?= /usr/local
PREFIX_INCLUDE_PATH ?= include/nick
PREFIX_LIBRARY_PATH ?= libINSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_INCLUDE_PATH)
INSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(PREFIX_LIBRARY_PATH)INSTALL ?= cp -a# validate gcc version for use fstack-protector-strong
MIN_GCC_VERSION = "4.9"
GCC_VERSION := "`gcc -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"CFLAGS += -fstack-protector-strong
elseCFLAGS += -fstack-protector
endifR_CFLAGS = -fPIC -Wall -O0 $(CFLAGS)uname := $(shell sh -c 'uname -s 2>/dev/null || echo false')#library file extensions
SHARED = so
STATIC = a## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
ifeq (Darwin, $(uname))SHARED = dylib
endif#NICK log library names
NLOG_SHARED = $(NLOG_LIBNAME).$(SHARED)
NLOG_SHARED_VERSION = $(NLOG_LIBNAME).$(SHARED).$(LIBVERSION)
NLOG_SHARED_SO = $(NLOG_LIBNAME).$(SHARED).$(NLOG_SOVERSION)
NLOG_STATIC = $(NLOG_LIBNAME).$(STATIC)#NICK IPC library names
NIPC_SHARED = $(NIPC_LIBNAME).$(SHARED)
NIPC_SHARED_VERSION = $(NIPC_LIBNAME).$(SHARED).$(LIBVERSION)
NIPC_SHARED_SO = $(NIPC_LIBNAME).$(SHARED).$(NIPC_SOVERSION)
NIPC_STATIC = $(NIPC_LIBNAME).$(STATIC)#NICK driver library names
NDRIVER_SHARED = $(NDRIVER_LIBNAME).$(SHARED)
NDRIVER_SHARED_VERSION = $(NDRIVER_LIBNAME).$(SHARED).$(LIBVERSION)
NDRIVER_SHARED_SO = $(NDRIVER_LIBNAME).$(SHARED).$(NDRIVER_SOVERSION)
NDRIVER_STATIC = $(NDRIVER_LIBNAME).$(STATIC)#NICK linux_sys library names
NLINUX_SYS_SHARED = $(NLINUX_SYS_LIBNAME).$(SHARED)
NLINUX_SYS_SHARED_VERSION = $(NLINUX_SYS_LIBNAME).$(SHARED).$(LIBVERSION)
NLINUX_SYS_SHARED_SO = $(NLINUX_SYS_LIBNAME).$(SHARED).$(NLINUX_SYS_SOVERSION)
NLINUX_SYS_STATIC = $(NLINUX_SYS_LIBNAME).$(STATIC)#SHARED_CMD = $(CC) -shared -o.PHONY: all shared static clean installall: shared staticshared: $(NLOG_SHARED) $(NIPC_SHARED) $(NDRIVER_SHARED) $(NLINUX_SYS_SHARED)static: $(NLOG_STATIC) $(NIPC_STATIC) $(NDRIVER_STATIC) $(NLINUX_SYS_STATIC).c.o:$(CC) -c $(R_CFLAGS) $< -o $@#static libraries
#NICK log
$(NLOG_STATIC): $(NLOG_OBJ)$(AR) rcs $@ $^
#NICK IPC
$(NIPC_STATIC): $(NIPC_OBJ)$(AR) rcs $@ $^
#NICK driver
$(NDRIVER_STATIC): $(NDRIVER_OBJ)$(AR) rcs $@ $^
#NICK linux_sys
$(NLINUX_SYS_STATIC): $(NLINUX_SYS_OBJ)$(AR) rcs $@ $^#shared libraries .so.1.0.0
#NICK log
$(NLOG_SHARED_VERSION): $(NLOG_OBJ)$(CC) -shared -o $@ $^ $(LDFLAGS)
#NICK IPC
$(NIPC_SHARED_VERSION): $(NIPC_OBJ)$(CC) -shared -o $@ $^ $(LDFLAGS)
#NICK driver
$(NDRIVER_SHARED_VERSION): $(NDRIVER_OBJ)$(CC) -shared -o $@ $^ $(LDFLAGS)
#NICK linux_sys
$(NLINUX_SYS_SHARED_VERSION): $(NLINUX_SYS_OBJ)$(CC) -shared -o $@ $^ $(LDFLAGS)#objects
#NICK log
$(NLOG_OBJ): RTlog.c exception.c
#NICK IPC
$(NIPC_OBJ): RTlog.c exception.c message_queue.c semaphore.c
#NICK driver
$(NDRIVER_OBJ): RTlog.c exception.c driver_nick.c
#NICK linux_sys
$(NLINUX_SYS_OBJ): RTlog.c exception.c linux_sys_nick.c#links .so -> .so.1 -> .so.1.0.0
#NICK log
$(NLOG_SHARED_SO): $(NLOG_SHARED_VERSION)ln -s $(NLOG_SHARED_VERSION) $(NLOG_SHARED_SO)
$(NLOG_SHARED): $(NLOG_SHARED_SO)ln -s $(NLOG_SHARED_SO) $(NLOG_SHARED)
#NICK IPC
$(NIPC_SHARED_SO): $(NIPC_SHARED_VERSION)ln -s $(NIPC_SHARED_VERSION) $(NIPC_SHARED_SO)
$(NIPC_SHARED): $(NIPC_SHARED_SO)ln -s $(NIPC_SHARED_SO) $(NIPC_SHARED)
#NICK driver
$(NDRIVER_SHARED_SO): $(NDRIVER_SHARED_VERSION)ln -s $(NDRIVER_SHARED_VERSION) $(NDRIVER_SHARED_SO)
$(NDRIVER_SHARED): $(NDRIVER_SHARED_SO)ln -s $(NDRIVER_SHARED_SO) $(NDRIVER_SHARED)
#NICK linux_sys
$(NLINUX_SYS_SHARED_SO): $(NLINUX_SYS_SHARED_VERSION)ln -s $(NLINUX_SYS_SHARED_VERSION) $(NLINUX_SYS_SHARED_SO)
$(NLINUX_SYS_SHARED): $(NLINUX_SYS_SHARED_SO)ln -s $(NLINUX_SYS_SHARED_SO) $(NLINUX_SYS_SHARED)#install
#NICK log
install-nlog:mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)$(INSTALL) includes/RTlog.h includes/exception_nick.h $(INSTALL_INCLUDE_PATH)$(INSTALL) $(NLOG_SHARED) $(NLOG_SHARED_SO) $(NLOG_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)$(INSTALL) $(NLOG_STATIC) $(INSTALL_LIBRARY_PATH)
#NICK IPC
install-nipc:mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)$(INSTALL) includes/message_queue_nick.h includes/semaphore_nick.h $(INSTALL_INCLUDE_PATH)$(INSTALL) $(NIPC_SHARED) $(NIPC_SHARED_SO) $(NIPC_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)$(INSTALL) $(NIPC_STATIC) $(INSTALL_LIBRARY_PATH)
#NICK driver
install-ndriver:mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)$(INSTALL) includes/driver_nick.h $(INSTALL_INCLUDE_PATH)$(INSTALL) $(NDRIVER_SHARED) $(NDRIVER_SHARED_SO) $(NDRIVER_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)$(INSTALL) $(NDRIVER_STATIC) $(INSTALL_LIBRARY_PATH)
#NICK linux_sys
install-nlinux_sys:mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)$(INSTALL) includes/linux_sys_nick.h $(INSTALL_INCLUDE_PATH)$(INSTALL) $(NLINUX_SYS_SHARED) $(NLINUX_SYS_SHARED_SO) $(NLINUX_SYS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)$(INSTALL) $(NLINUX_SYS_STATIC) $(INSTALL_LIBRARY_PATH)install: install-nlog install-nipc install-ndriver install-nlinux_sys#uninstall
#NICK log
uninstall-nlog:$(RM) $(INSTALL_LIBRARY_PATH)/$(NLOG_SHARED)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLOG_SHARED_VERSION)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLOG_SHARED_SO)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLOG_STATIC)$(RM) $(INSTALL_INCLUDE_PATH)/RTlog.h $(INSTALL_INCLUDE_PATH)/exception_nick.h
#NICK IPC
uninstall-nipc:$(RM) $(INSTALL_LIBRARY_PATH)/$(NIPC_SHARED)$(RM) $(INSTALL_LIBRARY_PATH)/$(NIPC_SHARED_VERSION)$(RM) $(INSTALL_LIBRARY_PATH)/$(NIPC_SHARED_SO)$(RM) $(INSTALL_LIBRARY_PATH)/$(NIPC_STATIC)$(RM) $(INSTALL_INCLUDE_PATH)/message_queue_nick.h $(INSTALL_INCLUDE_PATH)/semaphore_nick.h
#NICK driver
uninstall-ndriver:$(RM) $(INSTALL_LIBRARY_PATH)/$(NDRIVER_SHARED)$(RM) $(INSTALL_LIBRARY_PATH)/$(NDRIVER_SHARED_VERSION)$(RM) $(INSTALL_LIBRARY_PATH)/$(NDRIVER_SHARED_SO)$(RM) $(INSTALL_LIBRARY_PATH)/$(NDRIVER_STATIC)$(RM) $(INSTALL_INCLUDE_PATH)/driver_nick.h
#NICK linux_sys
uninstall-nlinux_sys:$(RM) $(INSTALL_LIBRARY_PATH)/$(NLINUX_SYS_SHARED)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLINUX_SYS_SHARED_VERSION)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLINUX_SYS_SHARED_SO)$(RM) $(INSTALL_LIBRARY_PATH)/$(NLINUX_SYS_STATIC)$(RM) $(INSTALL_INCLUDE_PATH)/linux_sys_nick.huninstall: uninstall-nlog uninstall-nipc uninstall-ndriver uninstall-nlinux_sysclean:$(RM) *.o #delete object files$(RM) $(NLOG_SHARED) $(NLOG_SHARED_VERSION) $(NLOG_SHARED_SO) $(NLOG_STATIC) #delete nlog$(RM) $(NIPC_SHARED) $(NIPC_SHARED_VERSION) $(NIPC_SHARED_SO) $(NIPC_STATIC) #delete nipc$(RM) $(NDRIVER_SHARED) $(NDRIVER_SHARED_VERSION) $(NDRIVER_SHARED_SO) $(NDRIVER_STATIC) #delete ndriver$(RM) $(NLINUX_SYS_SHARED) $(NLINUX_SYS_SHARED_VERSION) $(NLINUX_SYS_SHARED_SO) $(NLINUX_SYS_STATIC) #delete nlinux_sys

上面的文件运行make之后是这样的

linux@ubuntu:~/share/nick/lib_s$ tree
.
├── driver_nick.c
├── driver_nick.o
├── exception.c
├── exception.o
├── includes
│   ├── driver_nick.h
│   ├── exception_nick.h
│   ├── gpio.h
│   ├── linux_sys_nick.h
│   ├── message_queue_nick.h
│   ├── RTlog.h
│   └── semaphore_nick.h
├── libndriver.a
├── libndriver.so -> libndriver.so.1
├── libndriver.so.0.9.0
├── libndriver.so.1 -> libndriver.so.0.9.0
├── libnipc.a
├── libnipc.so -> libnipc.so.1
├── libnipc.so.0.9.0
├── libnipc.so.1 -> libnipc.so.0.9.0
├── libnlinux_sys.a
├── libnlinux_sys.so -> libnlinux_sys.so.1
├── libnlinux_sys.so.0.9.0
├── libnlinux_sys.so.1 -> libnlinux_sys.so.0.9.0
├── libnlog.a
├── libnlog.so -> libnlog.so.1
├── libnlog.so.0.9.0
├── libnlog.so.1 -> libnlog.so.0.9.0
├── linux_sys_nick.c
├── linux_sys_nick.o
├── Makefile
├── Makefile.back
├── message_queue.c
├── message_queue.o
├── RTlog.c
├── RTlog.o
├── semaphore.c
└── semaphore.o1 directory, 37 files

linux库文件编译的makefile相关推荐

  1. Linux库文件使用与编译

    介绍在Linux下使用静态库.共享库.动态库的方法. Linux库文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共 ...

  2. 二十六篇,Linux库文件(动态库和静态库)的制作。

    一.嵌入式linux库文件概念. 1.什么是库文件? 在linux下,有非常多的库文件. 例如: /lib                        --> 存放系统自带的库文件       ...

  3. linux 环境变量文件_应急响应系列之Linux库文件劫持技术分析,有点硬核哟

    0×01 菜逼阶段 Linux库文件劫持这种案例在今年的9月份遇到过相应的案例,当时的情况是有台服务器不断向个可疑IP发包,尝试建立连接,后续使用杀软杀出木马,重启后该服务器还是不断的发包,使用net ...

  4. linux 查看libevent 安装目录,linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置...

    libevent简介 libevent是基于Reactor模式的I/O框架库,它具有良好的跨平台性和线程安全,它实现了统一事件源(即对I/O事件.信号和定时事件提供统一的处理).高性能分布式内存对象缓 ...

  5. 查看库文件编译时所使用的GCC版本号

    可以使用如下命令来查看库文件编译时所使用的GCC版本: strings -a xxx.a | grep "GCC"

  6. 多个Makefile文件编译,Makefile多目标编译和多层次编译

    多个Makefile文件编译,Makefile多目标编译和多层次编译 README Makefile多目标编译 Makefile多层次编译 a文件夹 b文件夹 include文件夹 obj文件夹 多个 ...

  7. Linux 库文件的生成和使用

    目录 库文件生成与使用 1.库文件: 2.静态库的生成与使用 静态库的生成 静态库的使用 3.共享库的生成与使用 共享库的生成 共享库的使用 5.静态库和共享库的区别 库文件生成与使用 1.库文件: ...

  8. Linux库文件详解

    源自: https://www.cnblogs.com/yangg518/p/5842651.html 转自: http://www.cppblog.com/deane/articles/165216 ...

  9. linux中的变量文件路径,Linux库文件和Shell可执行程序命令文件搜索路径变量的设置...

    一.库文件的搜索路径: 1.在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存 ...

  10. Linux C文件编译

    设置编辑器 1.TAB键设置为4空格. 首先用vim打开/etc/vim/vimrc文件,这里面发现root用户才能修改vimrc文件,所以用sudo命令暂时切换到root用户. 在vimrc文件最后 ...

最新文章

  1. linux下字符串处理工具二:awk(1)
  2. Alibaba-AndFix Bug热修复框架的使用
  3. 基于Xml 的IOC 容器-开始读取配置内容
  4. java swt text 回车事件,Java SWT事件
  5. 【英语学习】【Daily English】U13 Holiday L04 How was it?
  6. 网红奶茶雪糕高价背后,到底是真好吃还是智商税
  7. Titlemizer 随机相关的标题生成器插件
  8. pytest框架+conftest.py配置公共数据的准备和清理
  9. 使用javascript实现html页面直接下载网盘文件
  10. STANDBY REDO LOG
  11. 《HBase权威指南》学习总结
  12. Linux操作系统——桌面和终端基本操作【快捷键、一般模式、编辑模式、 命令模式】
  13. 码农枪击了 4 名同事后被警方击毙!后附“程序员保命指南”
  14. c语言青蛙跳答案是多少啊,青蛙跳台阶问题(示例代码)
  15. 苹果计算机音频无法使用,苹果电脑没声音了怎么回事
  16. EV SSL证书和普通证书的区别
  17. mt7620a上tf卡驱动的支持
  18. 一个微博热搜引发的故事
  19. 利用棋盘格图案完成相机标定
  20. 黑马点评关键业务流程梳理一

热门文章

  1. Word文档中去除EndNote格式
  2. 苹果雪豹操作系统正式版_如何不花一分钱用上iPhone11?更新iOS13正式版吧
  3. 网站使用CDN有什么优势?
  4. 可编程串行通信接口芯片8251A
  5. HDFS常用命令总结
  6. mui+hbuilder 将图片压缩并转变为base64 与改变图片尺寸大小来减小图片文件大小
  7. 微信公众号授权H5页面
  8. axios配置多个请求地址(打包后可通过配置文件修改)
  9. YOLOV5-打标签建立自己的数据集
  10. php 限制字数_PHP中如何正确统计中文字数