嵌入式linux C++通用makefile模板

server/2024/11/28 11:35:47/

编译生成spdlog_app可执行程序

#Makefile
# 编译器
#COMPLITE=arm-none-linux-gnueabi-
#COMPLITE=/root/share/nuvoton_cross/arm_linux_4.8/bin/arm-nuvoton-linux-uclibceabi-
#/root/share/nuvoton_cross/host/usr/bin/
COMPLITE=arm-nuvoton-linux-gnueabi-
CC=$(COMPLITE)gcc
CXX=$(COMPLITE)g++
LD=$(COMPLITE)ld# 编译选项
CFLAGS = -Wall# 目标文件
TARGET = spdlog_app
OBJ_DIR = build# 源文件
# 当前目录下的.cpp
#SRCS = $(wildcard *.cpp)
#其他目录下的.cpp
SRCS += $(wildcard src/*.cpp)SRCS_C= $(wildcard src/*.c)
CFLAGS=-I./
CPPFLAGS=-I./
LDFLAGS=-L./LIBS=-lpthread -levent -lrt
#LIBS=
CFLAGS += -Wall
CPPFLAGS += -W -Wall -std=c++11 -Wno-psabi -lcCFLAGS += -I ./include
CPPFLAGS += -I ./include
#-Wall -fPIC -shared# 头文件
#CFLAGS += -Imodule1/inc
#CFLAGS += -Imodule2/inc
#CFLAGS += -Ipath/to/include2# LIB
#CFLAGS += -Lpath/to/lib1
#CFLAGS += -Lpath/to/lib2#添加宏定义
#CFLAGS += -DANDROID_OS# 对象文件和中间文件目录
OBJS = $(SRCS:%.cpp=$(OBJ_DIR)/%.o)
OBJS += $(SRCS_C:%.c=$(OBJ_DIR)/%.o)
# 默认构建目标
all: $(TARGET)# 生成可执行文件 
$(TARGET): $(OBJS)$(CXX) $(LDFLAGS) $(LIBS) -o $@ $^# 生成根目录下的目标文件
$(OBJ_DIR)/%.o: %.cpp | $(OBJ_DIR)
#创建文件夹很关键,不然会fail@mkdir -p $(dir $@)$(CXX) $(CPPFLAGS) -c $< -o $@# 生成根目录下的目标文件
$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR)
#创建文件夹很关键,不然会fail@mkdir -p $(dir $@)$(CC) $(CFLAGS) -c $< -o $@# 创建中间文件目录
$(OBJ_DIR):mkdir -p $(OBJ_DIR)clean:@echo "clean:"rm -rf $(OBJ_DIR)rm -rf $(TARGET)@echo "clean ok"

设置交叉编译工具链环境变量

root@ubuntu:~# source my_toolchain.sh 
root@ubuntu:~# cat my_toolchain.sh 
export PATH=$PATH:/root/share/nuvoton_cross/host/usr/bin
export PKG_CONFIG_LIBDIR=/root/share/nuvoton_cross/host/usr/lib/pkgconfig:/root/share/nuvoton_cross/host/usr/share/pkgconfig:$PKG_CONFIG_LIBDIR
export PKG_CONFIG_SYSROOT_DIR=/root/share/nuvoton_cross/host/usr/arm-nuvoton-linux-gnueabi/sysroot:$PKG_CONFIG_SYSROOT_DIRroot@ubuntu:~# 

源码目录如下:

root@ubuntu:~/share/gateway/spdlog_wrap# tree
.
├── build
│   └── src
│       ├── spdlogWrap.o
│       └── test_main.o
├── include
│   ├── spdlog
│   │   ├── async.h
│   │   ├── async_logger.h
│   │   ├── common.h
│   │   ├── details
│   │   │   ├── async_logger_impl.h
│   │   │   ├── circular_q.h
│   │   │   ├── console_globals.h
│   │   │   ├── file_helper.h
│   │   │   ├── fmt_helper.h
│   │   │   ├── logger_impl.h
│   │   │   ├── log_msg.h
│   │   │   ├── mpmc_blocking_q.h
│   │   │   ├── null_mutex.h
│   │   │   ├── os.h
│   │   │   ├── pattern_formatter.h
│   │   │   ├── periodic_worker.h
│   │   │   ├── registry.h
│   │   │   └── thread_pool.h
│   │   ├── fmt
│   │   │   ├── bin_to_hex.h
│   │   │   ├── bundled
│   │   │   │   ├── chrono.h
│   │   │   │   ├── color.h
│   │   │   │   ├── core.h
│   │   │   │   ├── format.h
│   │   │   │   ├── format-inl.h
│   │   │   │   ├── LICENSE.rst
│   │   │   │   ├── locale.h
│   │   │   │   ├── ostream.h
│   │   │   │   ├── posix.h
│   │   │   │   ├── printf.h
│   │   │   │   ├── ranges.h
│   │   │   │   └── time.h
│   │   │   ├── fmt.h
│   │   │   └── ostr.h
│   │   ├── formatter.h
│   │   ├── logger.h
│   │   ├── sinks
│   │   │   ├── android_sink.h
│   │   │   ├── ansicolor_sink.h
│   │   │   ├── base_sink.h
│   │   │   ├── basic_file_sink.h
│   │   │   ├── daily_file_sink.h
│   │   │   ├── dist_sink.h
│   │   │   ├── msvc_sink.h
│   │   │   ├── null_sink.h
│   │   │   ├── ostream_sink.h
│   │   │   ├── rotating_file_sink.h
│   │   │   ├── sink.h
│   │   │   ├── stdout_color_sinks.h
│   │   │   ├── stdout_sinks.h
│   │   │   ├── syslog_sink.h
│   │   │   └── wincolor_sink.h
│   │   ├── spdlog.h
│   │   ├── tweakme.h
│   │   └── version.h
│   ├── spdlogWrap.h
│   └── spdlogWrapM.h
├── makefile
├── spdlog_app
└── src├── spdlogWrap.cpp└── test_main.cpp9 directories, 60 files
root@ubuntu:~/share/gateway/spdlog_wrap# 

root@ubuntu:~/share/gateway/spdlog_wrap# make clean
clean:
rm -rf build
rm -rf spdlog_app
clean ok
root@ubuntu:~/share/gateway/spdlog_wrap# make all
mkdir -p build
arm-nuvoton-linux-gnueabi-g++ -I./ -W -Wall -std=c++11 -Wno-psabi -lc -I ./include -c src/test_main.cpp -o build/src/test_main.o
arm-nuvoton-linux-gnueabi-g++ -I./ -W -Wall -std=c++11 -Wno-psabi -lc -I ./include -c src/spdlogWrap.cpp -o build/src/spdlogWrap.o
src/spdlogWrap.cpp:22:10: warning: unused parameter ‘queuesize’ [-Wunused-parameter]bool spdlogWrap::Initspdlog(const char* logfile, unsigned int queuesize, unsigned int filesize, unsigned int backnum,\^
arm-nuvoton-linux-gnueabi-g++ -L./ -lpthread -levent -lrt -o spdlog_app build/src/test_main.o build/src/spdlogWrap.o
root@ubuntu:~/share/gateway/spdlog_wrap# ls -la
total 1408
drwxr-xr-x 5 root root    4096 Nov 27 22:04 .
drwxr-xr-x 7 root root    4096 Nov 17 20:20 ..
drwxr-xr-x 3 root root    4096 Nov 27 22:03 build
drwxr-xr-x 3 root root    4096 Nov 25 20:59 include
-rwxr--r-- 1 root root    1687 Nov 17 19:18 makefile
-rwxr-xr-x 1 root root 1416036 Nov 27 22:04 spdlog_app
drwxr-xr-x 2 root root    4096 Nov 25 21:14 src
root@ubuntu:~/share/gateway/spdlog_wrap# 


http://www.ppmy.cn/server/145611.html

相关文章

redis中的bigkey及读取优化

一、bigKey介绍 1、简介 在 Redis 中,Big Key(大键)指的是占用大量内存的单个键。通常,Redis 是一个高性能的内存数据库,但是当某些键变得非常大时,会带来性能上的影响。例如,大量的内存消耗、长时间的操作延迟,甚至可能导致 Redis 停止响应或崩溃。 通俗的来说,指…

macOS 开发环境配置与应用开发指南

macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统&#xff0c;因其稳定性、优雅的用户界面和强大的开发支持&#xff0c;已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用&#xff0c;还是Web应用、跨平台程序&#xff0c;macOS都提…

【Linux网络编程】TCP套接字

TCP与UDP的区别&#xff1a; udp是无连接的、面向数据报&#xff08;通信时以数据报为单位传输&#xff09;的传输层通信协议&#xff0c;其中每个数据报都是独立的&#xff0c;通信之前不需要建立连接&#xff0c;bind绑定套接字后直接可以进行通信。 tcp是面向连接的、基于字…

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序&#xff0c;用于从网站抓取数据。Python 凭借其丰富的库和简单的语法&#xff0c;是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识&#xff0c;并实现一个简单的爬虫项目。 1. 什么是网络爬虫&#xff1f; 网络爬虫&#x…

yum源配置(本地和网络源)

本地 需要先使用命令创建目录 mkdir -p /mnt/cdrom [rootlocalhost ~]# cd /etc/yum.repos.d [rootlocalhost yum.repos.d]# tar -czf CentOS-Base.tar.gz CentOS* [rootlocalhost ~]#rm -rf *repo [rootlocalhost yum.repos.d]# vi local.repo [local] namelocal_yum…

11.19c++面向对象+单例模式

编写如下类: class File{ FILE* fp }; 1:构造函数&#xff0c;打开一个指定的文件 2:write函数 向文件中写入数据 3&#xff1a;read函数&#xff0c;从文件中读取数据&#xff0c;以string类型返回 代码实现&#xff1a; #include <iostream>using namespace std;class…

1panel专业版防火墙自定义规则使用记录

案例一&#xff1a;自建lsky 使用1panel防火墙自定义规则通过匹配正则表达式实现仅可访问/i和/lsky 目录 注意&#xff1a;这里的lsky的服务是是使用的反代&#xff0c;反代&#xff0c;这里是用的反向代理&#xff0c;如果你有疑问&#xff0c;可以留言&#xff0c;看到会解答…

第21周:机器学习

目录 摘要 Abstract 一、ARIMA模型 1、时间序列模型 &#xff08;1&#xff09;时间序列的分析方法 &#xff08;2&#xff09;时间序列的预处理 &#xff08;3&#xff09;ARIMA模型的引入 2、AR模型 3、MA模型 4、小结 二、K-means聚类算法 三、实验 1、数据处…