首页 > 编程语言 >C / C++ 文件简单混编 + 轻量级日志系统使用

C / C++ 文件简单混编 + 轻量级日志系统使用

时间:2024-04-15 11:46:19浏览次数:31  
标签:文件 %. C++ 混编 cpp wildcard COBJS patsubst 轻量级

在项目工程里面,不一定全部是c或者c++文件,有时候是混合一起,这个时候如果使用makefile编译的话,就要考虑兼容两种类型的文件编译了; 实战经验如下:

根据自己的风格制作响应的打印和日志记录,makefile编写如下:

CC = gcc
CPP = g++

#文件夹路径
ROOTPATH=.
INCLUDE = -I./cfg/inc -I$(ROOTPATH)/easylogger/inc -I$(ROOTPATH)/easylogger/plugins/file
LIB=-lpthread

# c文件和c++文件混编要加
LDFLAGS=-lstdc++            

#.c文件目录
COBJS += $(patsubst %.c, %.o, $(wildcard *.c))
COBJS += $(patsubst %.c, %.o, $(wildcard $(ROOTPATH)/easylogger/src/*.c))
COBJS += $(patsubst %.c, %.o, $(wildcard $(ROOTPATH)/easylogger/plugins/file/elog_file.c))
COBJS += $(patsubst %.c, %.o, $(wildcard easylogger/port/*.c))
COBJS += $(patsubst %.c, %.o, $(wildcard cfg/port/*.c))

#.cpp文件目录
CPPSRCS:=$(wildcard *.cpp ./*.cpp) 
CPPOBJS := $(CPPSRCS:.cpp=.o)

# 目标文件
BIN=EasyLoggerLinuxDemo

CFLAGS = -O0 -g3 -Wall

all:$(BIN)

# c目标文件生成
$(COBJS) : %.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@ $(INCLUDE)
    mv $@ out

# cpp目标文件生成
$(CPPOBJS) : %.o: %.cpp
    $(CPP) $(CFLAGS) -c $< -o $@ $(INCLUDE)
    mv $@ out

# 目标文件生成依赖
$(BIN):$(COBJS) $(CPPOBJS)
    $(CC) out/*.o $(CFLAGS) $(LDFLAGS) $(LIB) -o $(BIN) 
    mv $(BIN) out

clean:
    rm -rf out/*

 

完整源码链接:  项目目录预览 - 开源项目 - GitCode

标签:文件,%.,C++,混编,cpp,wildcard,COBJS,patsubst,轻量级
From: https://www.cnblogs.com/weijian168/p/18135608

相关文章

  • C++数据结构和pb数据结构的转换
    1.C++topb1.1map嵌套对象结构 //pb数据结构messageInner{repeatedstringcodes=1;map<string,string>ext=2;};messageOuter{map<int32,Inner>uint2Inner=1;map<string,string>ext=2;};赋值代码:Outerreq;req.mu......
  • 第十五届蓝桥杯C++B组省赛总结
    A握手问题简单模拟,答案为:12045ptsB小球反弹数学,最重要的一点,不考虑反弹,一直让小球走,直到达到一个顶点,它就会反弹回去。所以问题就变成了扩展这些方块,直到满足小球的角度,让小球能达到另一个顶点。\(233333\times15a=343720\times17b\)解出来a和b就知道我们要延......
  • 【编程】C++ 常用容器以及一些应用案例
    介绍一些我常用的C++容器和使用方法,以及使用案例。blog1概述容器(Container)是一个存储其他对象集合的持有者对象。容器以类模板实现,对支持的元素类型有很大的灵活性。容器管理元素的存储并提供多个成员函数来访问和操作元素。两个主要类别:序列容器(Sequencecontainer):将元素维......
  • 【数学】向量点乘、叉乘的理论、应用及代码实现(C++)
    前言我总结了一下向量点乘,叉乘的概念,以及他们的应用及相关C++代码的实现。blog这类问题也是技术面试经常碰到的,一次研究透了会有收获。1向量向量具有大小和方向。共线向量:两个平行的向量为共线向量。1.1叉积CrossProduct$$\vec{a}\times\vec{b}=|\vec{a}||\vec{b}|\sin......
  • C++U6-12-阶段复习测评
          7、贝尔曼福特算法,是按顺序一轮一轮的松弛,如果有可以松弛的那就再来一轮;这个题第二轮就没有可以松弛的了,所以就没有第3轮了 8、这题是dijkstra算法,算法逻辑是:Dijkstra最短路径算法的步骤如下:初始化:创建一个距离数组 dist,用于存储起点到每个节点......
  • 01_C++基础
    C++基础1.什么是c++。​c++是c语言的升级版,在c的基础上增加了很多功能。是一种高级语言。2.什么是面向对象,什么又是面向过程。​c语言就是面向过程的,c++就是面向对象的。举例:a+b​直接计算a+b就是面向过程。​面向对象就是给a+b穿上了一层衣服。不......
  • c++ inline
    当在头文件中定义函数时,如果这个头文件被多个.cpp文件包含,那么每个包含该头文件的.cpp文件都会有一个该函数的副本。这在链接阶段会引起“多重定义”的错误,因为链接器找到多个相同符号的定义。使用inline关键字可以解决这个问题。当一个函数被声明为inline,编译器会尝试将......
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组题解
    试题A:握手问题本题总分:\(5\)分思路:组合计数,用为\(50\)个人握手的总方案数\(C^{2}_{50}\),减去七个人彼此没有握手握手的方案数\(C^{2}_{7}\)即为答案。A:握手问题#include<bits/stdc++.h>#defineintlonglong#definedblongdouble#defineall(f)f.begin()......
  • C与C++在函数和数据的比较
    C与C++在函数和数据的比较CData(struct)数据是一个类型->根据数据的类型创建出真正的数据Function函数就是用来处理数据的缺陷:语言没提供关键字.所以数据是全局的->各个函数都可以处理数据C++Data将数据和处理这些数据的函数包裹在一起,其他函数看不到其他函数处理......
  • C++ 键盘操作
    1.单方移动#include<iostream>#include<windows.h>#include<conio.h>usingnamespacestd;intmain(){HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);COORDcoord={0,0};SetConsoleCursorPosition(handle,coord);cout<&l......