赞
踩
# Makefile
CC=gcc
SRCS := $(wildcard *.c)
TARGET := $(SRCS:%.c=%)
$(TARGET):$(SRCS)
$(CC) $(SRCS) -o $(TARGET)
.PHONY : clean
clean:
rm -f $(TARGET)
20190518:编译cpp:
############ 交叉编译 CROSS_COMPILE=aarch64-himix100-linux- CC=$(CROSS_COMPILE)g++ # 当前路径 PWD := $(shell pwd) #库 LIB += -lpthread -lsqlite3 #参数 CFLAG= -D_GNU_SOURCE -D__USE_XOPEN -g #.cpp源文件 SRCS=$(wildcard ./src/*.cpp) #头文件 INC=-I$(PWD)/include #中间文件 OBJS=$(SRCS:.cpp=.o) #二进制文件 BIN=maincpp #start,表示开始执行 start:$(OBJS) $(CC) -o $(BIN) $(OBJS) $(CFLAG) $(LIB) .cpp.o: $(CC) $(INC) -o $@ -c $< $(CFLAB) $(LIB) .PHONY : clean clean: rm -f ${BIN} ./src/*.o
############ GCC编译 CROSS_COMPILE= ############ 交叉编译 #CROSS_COMPILE=aarch64-himix100-linux- CC=$(CROSS_COMPILE)gcc AR=$(CROSS_COMPILE)ar ########################### X86 ifeq ($(CC),gcc) #二进制文件 BIN=client STATIC_LIB= DYNAMIC_LIB= #库链接 LIB=-lm -lpthread -lrt -lsqlite3 ########################### ARM else BIN= #静态库 STATIC_LIB= #STATIC_LIB= libclient.a #DYNAMIC_LIB= #动态库 DYNAMIC_LIB=libcm_jt808.so #库 LIB +=-lm -lpthread -lrt -lsqlite3 LIB +=-lcm_gps -lcmfs1.0 -lcm_inquiry_file -lcmmp4 -lstdc++ endif #参数 CFLAG= -D_GNU_SOURCE -D__USE_XOPEN -g #.c源文件 SRC=$(wildcard ./src/*.c) #.h源文件 HEAD_SRC=$(wildcard ./include/*.h) #.o中间文件 OBJ=$(SRC:%.c=%.o) all: ${BIN} ${STATIC_LIB} ${DYNAMIC_LIB} #编译生成.o中间文件 %.o: %.c %.h ${CC} -c ${CFLAG} $< -o $@ #编译生成二进制文件 ${BIN}: ${OBJ} ${HEAD_SRC} ${CC} -o $@ ${OBJ} ${CFLAG} ${LIB} #编译静态库 ${STATIC_LIB}: ${OBJ} ${HEAD_SRC} ${AR} -cvq $@ ${OBJ} #编译动态库 ${DYNAMIC_LIB}: ${SRC} ${HEAD_SRC} ${CC} -shared -fPIC -Wall -o $@ ${SRC} ${CFLAG} .PHONY : clean clean: rm -f ${BIN} ${OBJ} ${STATIC_LIB} ${DYNAMIC_LIB} *.o *.a *.so
文件目录树结构为:
root@ubuntu:/home# tree
.
├── include
│ ├── client.h
│ ├── gps_module.h
│ └── jt.h
├── Makefile
└── src
├── client.c
├── gps_module.c
└── jt.c
2 directories, 7 files
root@ubuntu:/home#
Makefile文件源码为:
#编译器 cc = gcc #目标文件 prom = client #编译参数(程序中使用了多线程,所以使用lpthread) CFLAGS = -lpthread #源文件 src = $(shell find ./src/ -name "*.c") #中间文件 obj = $(prom).o #根据中间文件编译生成 目标文件 $(prom): $(obj) $(cc) $(obj) -o $(prom) $(CFLAGS) #根据源文件生成 中间文件 $(obj): $(src) $(cc) -c $(src) #clean clean: rm -rf $(prom) *.o
编译过程:
root@ubuntu:/home# ls
include Makefile src
root@ubuntu:/home# make
gcc -c ./src/client.c ./src/jt.c ./src/gps_module.c
lgcc client.o -o client -lpthread
root@ubuntu:/home# ls
client client.o gps_module.o include jt.o Makefile src
root@ubuntu:/home#
写的不是很规范(自己的程序可以将就用)大家酌情参考。
20181218更新:
#gcc cc = gcc #Hi3559 #cc = arm-hisiv600-linux-gcc #cc = arm-hisiv600-linux-g++ #ar = arm-hisiv600-linux-ar #Hi3559A #cc = aarch64-himix100-linux-gcc ########################### 链接 ################### #-lrt参数是为了实时库 librt ,没有该参数会报错 CFLAGS = -lpthread -lrt socf = -fPIC -shared ########################### 源文件 ################# #.c文件 src = $(shell find ./src/ -name "*.c") #src = $(shell find ./ -name "*.c") #中间.o文件 osrc = $(shell find ./ -name "*.o") ######################### 目标文件 ################ #编译生成的中间文件 obj = $(prom).o #编译成二进制文件 prom = client #编译成静态库 aprom = libclient.a soprom = libclient.so ########################## 由.o文件编译生成目标文件 ##### ifeq ($(cc),gcc) #编译出二进制文件 $(prom): $(obj) $(cc) $(osrc) -o $(prom) $(CFLAGS) else #编译出静态库 $(aprom): $(obj) $(ar) rcs -o $(aprom) $(osrc) #endif #$(aprom): $(obj) # $(ar) rcs -o $(soprom) -o $(socf) endif ######################## 由.c文件编译生成.o文件 ######## #.c文件编译生成.o文件 $(obj): $(src) $(cc) -c $(src) $(CFLAGS) # $(cc) -c $(src) $(CFLAGS)-lcppdeque.so # $(cc) -c $(src) $(CFLAGS) -L libcppdeque.a ################################################# clean: rm -rf $(prom) $(osrc) $(aprom)
20190108更新:
简单通用的Makefile .c编译成二进制文件(没有生成 .o 文件)
# Makefile
cc=gcc
LDFLAGS=-lncurses
SRCS := $(wildcard *.c)
TARGET := $(SRCS:%.c=%)
$(TARGET):$(SRCS)
$(cc) $(LDFLAGS) $(SRCS) -o $(TARGET)
clean:
rm $(TARGET)
参考链接:
https://blog.csdn.net/zhaocuit/article/details/74782789
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。