当前位置: 首页 > news >正文

Linux:编写编译脚本Makefile文件

一、生成可执行文件

1、一个源文件编译
本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。
1).c文件

// testadd.c
#include <stdio.h>
int main() {int a = 1;int b = 2;int sum = a + b;printf("sum = %d\n", sum);return 0;
}// Makefie
GXX = g++
CC = gcc
TARGET = testadd
OBJS = testadd.otestadd:${OBJS}${CC } ${OBJS} -o ${TARGET} # 空格处为一个Tap
testadd.o:testadd.c
clean:rm -r ${OBJS} ${TARGET} # 空格处为一个Tap

2) .cpp文件

// testadd.cpp#include <stdio.h>
//#include <iostream>
int main() {int a = 1;int b = 2;int sum = a + b;printf("c sum = %d\n", sum);//std::cout <<"c ++ sum = " << sum<<std::endl;return 0;
}// Makefile
GXX = g++
CC = gcc
TARGET = testadd
OBJS = testadd.otestadd:${OBJS}${GXX} ${OBJS} -o ${TARGET} # 空格处为一个Tap
testadd.o:testadd.cpp
clean:rm -r ${OBJS} ${TARGET} # 空格处为一个Tap

经过以上测试,总结如下:
以.cpp为后缀的文件,为c++代码。代码最好使用C++语言。也可以使用c语言。
a 代码使用c++语言,编译时必须要用g++,不能使用gcc。
b 代码使用c语言,编译时可以使用gcc ,也可以使用g++。

以.c为后缀的文件,为c代码,代码最好使用c语言。
a 代码使用c语言,编译时可以使用g++,也可以使用gcc.
b 代码使用c++语言,编译时,不能使用gcc,也不能使用g++.
既:cpp文件可以使用c语言,c++语言编写。c文件,只能使用c语言编写。

2、 两个源文件,以.cpp文件为例
在这里插入图片描述

// testadd.cpp
#include "add.hpp"
int main() {int sum = add(5,8);std::cout <<"c ++ sum = " << sum<<std::endl;return 0;
}// add.cpp
#include "add.hpp"
int add(int a, int b) {std::cout<<"a = "<<a<<std::endl;std::cout<<"b = "<<b<<std::endl;return a + b;
}// add.hpp
#include <iostream>
int add(int a, int b);// Makefile
GXX = g++
CC = gcc
TARGET = testadd
TARGET_SOURCE = testadd.cpp \add.cpp${TARGET}:${TARGET_SOURCE}${GXX} -o ${TARGET} ${TARGET_SOURCE}
clean:rm -r *.o ${TARGET}

编译指令:make。生成testadd

3、编译成动态库
源代码与实例2相同,Makefile文档如下:

GXX = g++
CC = gcc
TARGET = libadd.so
TARGET_SOURCE = add.cpp ${TARGET}:${TARGET_SOURCE}${GXX} -shared -fPIC ${TARGET_SOURCE} -o ${TARGET} 
clean:rm -r *.o ${TARGET}

编译指令:make。生成add.so

4、使用动态库
源码与上述源码相同。Makefile文件。

// Makefile
GXX = g++
CC = gcc
TARGET = testadd
TARGET_SOURCE = testadd.cpp
LIBS = /home/lily/cproject/testMakeFile/libs   # so库所在路径
${TARGET}:${TARGET_SOURCE}${GXX} -o ${TARGET} ${TARGET_SOURCE} -L${LIBS} -ladd
clean:rm -r *.o ${TARGET}

编译指令:make 。生成testadd.
注意:在./testadd 之前,需要添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lily/cproject/testMakeFile/libs,否则报错找到库文件。
在这里插入图片描述
5、头文件放到include文件夹下,其他不动。Makefile

在这里插入图片描述

# Makefile
# Compile as C++11
#add_compile_options(-std=c++11)# 指定编译器
CXX = g++
CC = gcc#指定编译选项
CFLAGS = -Wall -g
TARGET = testadd
Src:=$(wildcard *.cpp)
Objs:=$(patsubst %.cpp,%.o, $(Src))
#指定头文件位置
INCLUDES = -I ./include
#指定库文件
LIBS=-L ./libs -ladd$(TARGET):$(Objs)echo $(Objs)@mkdir -p output$(CXX) $(Objs) $(LIBS) -o output/$(TARGET)%.o:%.cpp$(CXX) $(INCLUDES) $(CFLAGS) -c $< -o $@clean:rm $(Objs)

相关文章:

Linux:编写编译脚本Makefile文件

一、生成可执行文件 1、一个源文件编译 本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。 1).c文件 // testadd.c #include <stdio.h> int main() {int a 1;int b 2;int sum a b;printf("sum %d\n", sum);return 0; }// Makefie GXX g CC gcc…...

深入浅出Pytorch函数——torch.nn.init.calculate_gain

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

【PHP】PHP入门指南:从基础到进阶

PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的服务器端脚本语言&#xff0c;尤其在Web开发领域有着重要的地位。本文旨在为初学者提供一份详尽的PHP入门指南&#xff0c;帮助您了解PHP的基础知识和语法&#xff0c;掌握基本的编程技巧&#xff0c;并熟悉…...

【100天精通python】Day45:python网络爬虫开发_ Scrapy 爬虫框架

目录 1 Scrapy 的简介 2 Scrapy选择器 3 快速创建Scrapy 爬虫 4 下载器与爬虫中间件 5 使用管道Pielines 1 Scrapy 的简介 Scrapy 是一个用于爬取网站数据并进行数据提取的开源网络爬虫框架。它使用 Python 编程语言编写&#xff0c;并提供了一套强大的工具和库&#xff0…...

怎么写出更好的高质量内容输出

为了更好地输出高质量的内容&#xff0c;不仅仅需要了解写作的基本原则&#xff0c;还需要深入挖掘目标读者的需求、持续的自我提升以及对信息的严格筛选。以下是一些建议&#xff0c;帮助你更好地输出高质量的内容&#xff1a; 1.充分了解你的受众 调查和了解你的目标读者&am…...

HJ31 单词倒排 题解

题目描述&#xff1a;单词倒排_牛客题霸_牛客网 (nowcoder.com) 对字符串中的所有单词进行倒排。 1、构成单词的字符只有26个大写或小写英文字母&#xff1b; 2、非构成单词的字符均视为单词间隔符&#xff1b; 3、要求倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符…...

LeetCode42.接雨水

这道题呢可以按列来累加&#xff0c;就是先算第1列的水的高度然后再加上第2列水的高度……一直加到最后就是能加的水的高度&#xff0c;我想到了这里然后就想第i列的水其实就是第i-1列和i1列中最小的高度减去第i列的高度&#xff0c;但是其实并不是&#xff0c;比如示例中的第5…...

优化时间流:区间调度问题的探索与解决

在浩如烟海的信息时代&#xff0c;时间的有效管理成为了一门不可或缺的艺术。无论是生活中的琐事&#xff0c;还是工作中的任务&#xff0c;时间都在无声地流逝&#xff0c;挑战着我们的智慧。正如时间在日常生活中具有的宝贵价值一样&#xff0c;在计算机科学领域&#xff0c;…...

【Python】强化学习:原理与Python实战

搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答 RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff0c;人类反馈强化学习&#xff09;虽是热门概念&#xff0c;并非包治百病的万用仙丹。本问答探讨RLHF的适用范围、优缺点和可能遇到的问题&#xff…...

设计模式——合成复用原则

文章目录 合成复用原则设计原则核心思想合成案例聚合案例继承案例优缺点 合成复用原则 原则是尽量使用合成/聚合的方式&#xff0c;而不是使用继承 设计原则核心思想 找出应用中可能需要变化之处&#xff0c;把它们独立出来&#xff0c;不要和那些不需要变化的代码混在一起。…...

基于OpenCV实战(基础知识一)

目录 简介 1.计算机眼中的图像 2.图片的读取、显示与保存 3.视频的读取与显示 简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和…...

如何高效的接入第三方接口

作为程序员的我们,经常会接到领导的安排,接入某某的接口,方面我们如何如何, 例如:领导在1号时给作为员工的你说,最近系统需要增加一个新的支付方式,一会和对方技术组建一个群,有什么问题,可以直接在群里说,最近还说,尽快接入,客户等着用,让你在5号前,完成接入工…...

docker pip下载依赖超时或失败问题解决

Docker容器使用pip安装Python库时超时&#xff0c;可能是由于多种原因。以下是一些建议和解决方法&#xff1a; 使用国内镜像源: 如果你位于中国&#xff0c;可以尝试更换到国内的镜像源。例如&#xff0c;可以使用阿里云、腾讯云、清华大学提供的镜像。 你可以在Dockerfile中添…...

python并发编程

一、程序提速的方法 二、python对并发编程的支持 多线程&#xff1a;threading&#xff0c;利用CPU和IO可以同时执行的原理&#xff0c;让CPU不会干巴巴等待IO完成&#xff1b;多进程&#xff1a;multiprocess&#xff0c;利用多核CPU的能力&#xff0c;真正的并行执行任务&am…...

【面试题】:前端怎么实现权限设计及遇到的bug

一.权限的概念 前端权限分为页面权限、按钮权限、API权限。 二.页面权限的实现过程 ①用户登录进去调用获取用户信息接口&#xff0c;后端会给我们返回一个权限标识符 ②在获取到数据之后,我们就要判断用户能访问到哪些页面,我们可以在vuex中permission模块中的action…...

Vue 2 插槽

可以先阅读组件基础-简单了解通过插槽分发内容。 一、插槽定义 插槽将子组件标签间的内容分发到子组件模板的<slot>标签位置。 如果没有<slot>标签&#xff0c;那么该内容将被丢弃。 二、编译作用域 内容在哪个作用域编译&#xff0c;就可以访问哪个作用域的数据…...

Spring 容器启动耗时统计

为了了解 Spring 为什么会启动那么久&#xff0c;于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…...

1. 优化算法学习

参考文献 1609&#xff1a;An overview of gradient descent optimization algorithms 从 SGD 到 Adam —— 深度学习优化算法概览(一) - 知乎 机器学习札记 - 知乎...

再获荣誉丨通付盾WAAP解决方案获“金鼎奖”优秀金融科技解决方案

今年四月&#xff0c;2023中国国际金融展在首钢会展中心成功落下帷幕。中国国际金融展作为金融开放创新成果的展示、交流、传播平台&#xff0c;历经多年发展,已成为展示中国金融发展成就、宣传金融改革成果、促进金融产业创新和推动金融信息化发展的有效平台。 “金鼎奖”评选…...

【腾讯云 TDSQL-C Serverless 产品测评】“橡皮筋“一样的数据库『MySQL高压篇』

【腾讯云 TDSQL-C Serverless 产品测评】"橡皮筋"一样的数据库 活动介绍服务一览何为TDSQL &#xff1f;Serverless 似曾相识&#xff1f; 降本增效&#xff0c;不再口号&#xff1f;动手环节 --- "压力"山大实验前瞻稍作简介资源扩缩范围&#xff08;CCU&…...

DeOldify处理超分辨率图像实战:应对大尺寸老照片的内存与计算挑战

DeOldify处理超分辨率图像实战&#xff1a;应对大尺寸老照片的内存与计算挑战 老照片修复&#xff0c;听起来是个挺有情怀的事儿。但当你真的拿到一张祖辈传下来的、扫描出来的超大尺寸老照片时&#xff0c;情怀可能瞬间就被现实浇灭了。动辄几千乘几千像素的扫描件&#xff0…...

Granite TimeSeries FlowState R1实战:基于卷积神经网络(CNN)的时序特征提取进阶

Granite TimeSeries FlowState R1实战&#xff1a;基于卷积神经网络&#xff08;CNN&#xff09;的时序特征提取进阶 你是不是也遇到过这样的问题&#xff1f;面对一长串传感器读数、股票价格波动或者服务器监控数据&#xff0c;感觉信息量巨大&#xff0c;却不知道从哪里入手…...

Qwen3-ASR-0.6B应用分享:打造智能语音助手的第一步

Qwen3-ASR-0.6B应用分享&#xff1a;打造智能语音助手的第一步 1. 语音识别技术的新选择 在智能语音助手、会议记录、客服系统等场景中&#xff0c;语音识别(ASR)技术正变得越来越重要。传统方案要么识别准确率不够高&#xff0c;要么需要消耗大量计算资源。Qwen3-ASR-0.6B的…...

DM数据库迁移实战:dimp与dexp版本兼容性问题解析与解决方案

1. 当DM数据库迁移遇上版本兼容性问题 最近在帮客户做DM数据库迁移时&#xff0c;遇到了一个典型问题&#xff1a;用高版本dexp导出的数据文件&#xff0c;无法用低版本dimp导入。这就像用最新版Word写的文档&#xff0c;用老版本打不开一样让人头疼。具体表现是执行导入命令时…...

lite-avatar形象库使用手册:浏览、选择、集成三步搞定

lite-avatar形象库使用手册&#xff1a;浏览、选择、集成三步搞定 在数字人应用开发中&#xff0c;选择合适的虚拟形象往往是项目启动的第一个挑战。传统方式需要从零开始建模、训练&#xff0c;不仅耗时耗力&#xff0c;结果也难以保证。lite-avatar形象库的出现&#xff0c;…...

3大突破!LxgwWenKai字体效率革命:从代码阅读到多场景适配全指南

3大突破&#xff01;LxgwWenKai字体效率革命&#xff1a;从代码阅读到多场景适配全指南 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目&#xff0c;提供了多种版本的字体文件&#xff0c;适用于不同的使用场景&#xff0c;包括屏幕阅读、轻便版、GB规范字…...

MusePublic显存利用率提升方案:CPU卸载+自动清理策略详解

MusePublic显存利用率提升方案&#xff1a;CPU卸载自动清理策略详解 1. 项目背景与显存挑战 MusePublic是一款专为艺术感时尚人像创作设计的轻量化文本生成图像系统。基于专属大模型和safetensors格式封装&#xff0c;系统针对艺术人像的优雅姿态、细腻光影和故事感画面进行了…...

AI-AGENT概念解析 - LLM领域训练

**问题&#xff1a;对于LLM大模型的应用来说&#xff0c;不同的专业需要不同的大模型去进行相应的专业训练吗&#xff1f;同时&#xff0c;不同的大模型训练为不同的专业&#xff0c;那同一个大模型可以为不同的专业进行训练吗&#xff1f;如果可以&#xff0c;那是怎么训练的&…...

结合AI改写技术与五个技巧,快速优化论文查重率至合格范围

嘿&#xff0c;大家好&#xff01;我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题&#xff1a;论文重复率飙到30%以上怎么办&#xff1f;别慌&#xff0c;我这就分享5个实用降重技巧&#xff0c;帮你一次搞定&#xff0c;轻松压到合格线以下。这些方法都是我亲身试验过的&a…...

ofa_image-caption实际项目:为AR眼镜提供实时本地图像语义理解能力

ofa_image-caption实际项目&#xff1a;为AR眼镜提供实时本地图像语义理解能力 1. 项目背景与价值 想象一下&#xff0c;当你戴着AR眼镜走在街上&#xff0c;看到一家咖啡馆的招牌&#xff0c;眼镜立即为你生成这段英文描述&#xff1a;"A modern coffee shop with larg…...