当前位置:   article > 正文

Makefile 文件 -只有include和src文件夹 (自己用)_makefile include src

makefile include src

20190902:编译单一文件测试程序:

# Makefile
CC=gcc

SRCS := $(wildcard *.c)
TARGET := $(SRCS:%.c=%)

$(TARGET):$(SRCS)
	$(CC)  $(SRCS) -o $(TARGET) 

.PHONY : clean
clean:
	rm -f $(TARGET)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

最新模板



############ 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


	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88

文件目录树结构为:

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# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

编译过程:

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#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

写的不是很规范(自己的程序可以将就用)大家酌情参考。

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)  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

参考链接:
https://blog.csdn.net/zhaocuit/article/details/74782789

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/292904
推荐阅读
相关标签
  

闽ICP备14008679号