makefile中编译生成so库并且通过链接该so库生成bin程序
初版:
test: test.o libv4l2.so
g++ -o test test.o -L. -Wl,-rpath=./ -lv4l2
test.o: test.cpp
g++ -o test.o test.cpp -c
libv4l2.so: UsbCamera.cpp
g++ -o libv4l2.so UsbCamera.cpp -shared -fPIC
clean:
rm test.o test libv4l2.so
上面这种是最简单的makefile的写法,还是少用这种写法,看起来就感觉很low ==!下面我们来对它进行改版。
其核心语句本质上也还是上面的,主要是用一些变量对其进行表示,使其更加通用化,然后我们只修改变量即可。
#CROSS := aarch64-linux-gnu-
CROSS :=
CC := $(CROSS)gcc
CXX := $(CROSS)g++
#编译生成bin文件
TARGET := test
SRC := test.cpp
LDFLAGS := -L./ #链接库的路径
LIBS := -lv4l2 #链接编译出来的动态库 libv4l2.so
INCLUDE := -I./ #头文件路径
#编译生成so库
TARGET_LIB := libv4l2.so
LIB_SRC := UsbCamera.cpp
CFLAGS := -shared -fPIC
$(TARGET): $(SRC) $(TARGET_LIB)
$(CXX) -o $@ $^ $(LDFLAGS) $(INCLUDE) -Wl,-rpath=./ $(LIBS)
#test.o: $(SRC)
# $(CXX) -o $@ $^ -c
$(TARGET_LIB): $(LIB_SRC)
$(CXX) -o $@ $^ $(CFLAGS)
clean:
rm $(TARGET) libv4l2.so