linux makefile 头文件和源码文件不在一个文件夹中,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)

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值