C、C++项目中 configure、makefile.am、makefile.in、makefile 之间的关系
一、configure、makefile.am、makefile.in、makefile 之间的关系
这四个文件都是与 GNU Make(一个用于管理程序的编译和安装过程的工具)有关的文件,它们的关系如下:
-
configure:是一个脚本文件,用于根据系统环境生成 makefile 文件,其中包含了一些变量和选项,以配置要编译的程序。configure 脚本会根据用户的选择生成 makefile.in 文件。
-
makefile.am:是一个 Makefile 的模板文件,包含了程序需要的各种源文件、库链接、编译选项、安装目录等信息,但是这个文件还不能直接使用,需要通过 automake 工具来生成 makefile.in 文件。
-
makefile.in:是一个可根据具体用户平台生成 makefile 的模板文件,其中包含了 configure 脚本中定义的变量和选项信息,以及 makefile.am 文件中定义的源文件、库链接、编译选项、安装目录等信息。
-
makefile:是最终生成的 Makefile 文件,是根据 makefile.in 文件生成的,其中包含了编译、链接、安装等操作的规则和具体的指令信息。最终通过 make 命令执行该文件,完成程序的编译、链接和安装。
二、示例
假设我们有以下简单的 C 语言程序,包含两个源文件 hello.c 和 world.c,并需要链接 libm 库:
// hello.c
#include <stdio.h>int main() {printf("Hello ");return 0;
}// world.c
#include <stdio.h>
#include <math.h>int main() {printf("World! sin(2.0)=%f\n", sin(2.0));return 0;
}
针对这个程序,我们需要编写一个 Makefile 文件实现以下功能:
- 编译
hello.c和world.c为可执行文件hello和world。 - 链接
hello和world以生成可执行文件hello_world。 - 安装可执行文件
hello_world。
下面是一个简单的示例 Makefile.am 文件:
# Makefile.ambin_PROGRAMS = hello_worldhello_world_SOURCES = hello.c world.c
hello_world_LDADD = -lm
上述 Makefile 文件使用 Automake 工具生成具有类似以下内容的 Makefile.in 文件:
# Makefile.in# variables
bindir = /usr/local/bin# targets
hello_world_SOURCES = hello.c world.c
hello_world_LDADD = -lm
bin_PROGRAMS = hello_world# rules
all: hello_worldhello_world: hello.o world.o$(LINK) $(hello_world_LDFLAGS) -o $@ $^ $(hello_world_LDADD)%.o: %.c$(COMPILE) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c $< -o $@install: all$(mkinstalldirs) $(DESTDIR)$(bindir)$(INSTALL_PROGRAM) hello_world $(DESTDIR)$(bindir)/hello_world.PHONY: clean
clean:rm -f *.o hello_world
最终,我们可以通过以下命令生成 Makefile、编译和安装可执行文件:
# 生成 Makefile
$ ./configure# 编译和链接
$ make# 安装
$ sudo make install
相关文章:
C、C++项目中 configure、makefile.am、makefile.in、makefile 之间的关系
一、configure、makefile.am、makefile.in、makefile 之间的关系 这四个文件都是与 GNU Make(一个用于管理程序的编译和安装过程的工具)有关的文件,它们的关系如下: configure:是一个脚本文件,用于根据系统…...
【网络】传输层——UDP | TCP(协议格式确认应答超时重传连接管理)
🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 现在是传输层,在应用层中的报文(报头 有效载荷)就不能被叫做报文了,而是叫做数…...
198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
198.打家劫舍 class Solution { public:int rob(vector<int>& nums) {if(nums.size()0)return 0;if(nums.size()1)return nums[0];vector<int>dp(nums.size());dp[0]nums[0];dp[1]max(nums[0],nums[1]);for(int i2;i<nums.size();i)dp[i]max(dp[i-1],dp[i-…...
ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图
目录 ArcGIS Maps SDK for JavaScript简介ArcGIS Maps SDK for JavaScript 4.x 的主要特点和功能AMD modules 和 ES modules两种方式比较Vue3中使用ArcGIS Maps SDK for JavaScript的步骤创建 Vue 3 项目安装 ArcGIS Maps SDK for JavaScript创建地图组件 ArcGIS Maps SDK for …...
服务器扩展未生效
服务器扩容未生效 在阿里云付费扩容后,在服务器里面看未生效。 阿里云->实例与镜像->实例->选择实例->云盘->扩容进入linux服务器查看: df -h vda1扩容未生效。原40g->扩容后100g 解决方法: 1、安装growpart yum inst…...
Jenkins构建自由风格项目发布jar到服务器
前面的文章有介绍 docker安装jenkins 和 dockerjenkins发布spring项目;这里就不做过多的介绍,直接说明构建步骤。 1、选择构建一个自由风格的项目 2、 选择丢弃旧的构建 3、配置Git信息 4、构建触发器 和 构建环境可以直接跳过 5、直接来到Build Step…...
Rabbitmq延迟消息
目录 一、延迟消息1.基于死信实现延迟消息1.1 消息的TTL(Time To Live)1.2 死信交换机 Dead Letter Exchanges1.3 代码实现 2.基于延迟插件实现延迟消息2.1 插件安装2.2 代码实现 3.基于延迟插件封装消息 一、延迟消息 延迟消息有两种实现方案ÿ…...
miniExcel 生成excel
一、nuget dotnet add package MiniExcel --version 1.31.2 二、新建表及数据 ExampleProducts 三、这里我用了Dapper.Query方法 读取excel public virtual async Task<IActionResult> Anonymous(){try{//using (var connection _dbContext.GetDbConnection())//{//…...
Handler详解
跟Handler有关系的,包括Thread,Looper,Handler,MessageQueue Looper: 由于Looper是android包加入的类,而Thread是java包的类,所以,想要为Thread创建一个Looper,需要在线程内部调用…...
Feign忽略Https的SSL最佳方案(且保证负载均衡将失效)
同时解决Https的SSL证书验证问题和feign不支持Patch请求方法的问题 代码 1. 工具类 OkHttpUtils.java import javax.net.ssl.*; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import j…...
Neo4j之SET基础
在 Neo4j 中,SET 语句用于更新节点或关系的属性。它允许你修改节点或关系的属性值,可以单独使用,也可以与其他查询语句(如 MATCH、CREATE、MERGE 等)一起使用。以下是一些使用 SET 语句的常见例子,以及它们…...
Redis 缓存过期及删除
一、Redis缓存过期策略 物理内存达到上限后,像磁盘空间申请虚拟内存(硬盘与内存的swap),甚至崩溃。 内存与硬盘交换 (swap) 虚拟内存,频繁I0 性能急剧下降,会造成redis内存急剧下降; 一般设置物理内存的3/4,在redis…...
万字长文·通俗易懂·一篇包掌握——输入/输出·文件操作(c语言超详细系列)(二)
前言:Hello,大家好😘,我是心跳sy,上一节我们主要学习了格式化输入输出的基本内容,这一节我们对格式化进行更加深入的了解,对文件概念进行介绍,并且对输入、输出与文件读写的基本概念…...
【左神算法刷题班】第17节:在有序二维数组中查找目标值、等于目标字符串的子序列个数
第17节 题目1:在有序二维数组中查找目标值 给定一个每一行有序、每一列也有序,整体可能无序的二维数组 再给定一个数num, 返回二维数组中有没有num这个数 例子 数组如下,找 6 是否存在。 1 3 5 7 2 4 6 13 3 9 14 …...
【Terraform学习】本地变量(Terraform配置语言学习)
背景: 关于如何在机器上拉terraform代码,初始化就不重复了,需要的可以查看前面的文章: 【Terraform学习】Terraform-AWS部署快速入门(快速入门)_向往风的男子的博客-CSDN博客 使用本地变量命名资源 将每…...
zabbix自动注册服务器以及部署代理服务器
文章目录 Zabbix自动注册服务器及部署代理服务器一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用:2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 …...
掌握Python的X篇_32_使用python编辑pdf文件_pdfrw
本篇介绍利用python操作pdf文件,我们平时也会有合并和拆分pdf的需求,此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址:https://github.co…...
【软件工程】软件测试
软件测试的对象 软件程序文档 测试对象:各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场,对软件测试的目的存在着两种完全对立的观点。 (1)一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)…...
Android性能优化——内存优化
一、内存问题 内存抖动,锯齿状,GC导致卡顿内存泄漏,可用内存减少,频繁GC 内存溢出,OOM,程序异常 二、内存分析工具 Memory ProfilerMemory Analyzer LeakCanary Memory Profiler 实时图表展示应用内存使…...
Android Studio实现图形验证码
源代码 源代码MainActivity 效果图32行需要修改,不修改会报错:需要常量表达式,我的代码已修改 点击后 MainActivity import static com.example.graphicverificationcode.RxCaptcha.TYPE.NUMBER;import android.annotation.SuppressLint; …...
物流调度乱、单据处理难?实测实在Agent,物流企业数智化转型的“数字员工”天花板
摘要 站在2026年4月这个AI Agent商业化爆发的节点,物流行业正经历从“经验驱动”向“智能体自主决策”的范式转移。尽管数字化转型已喊了多年,但大量物流企业仍深陷系统孤岛、人肉搬运数据、信创适配难等隐形泥潭,传统RPA或API集成方案在面对…...
intv_ai_mk11快速部署教程:30秒获取GPU服务地址,5分钟完成首次高质量对话
intv_ai_mk11快速部署教程:30秒获取GPU服务地址,5分钟完成首次高质量对话 1. 什么是intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手,拥有7B参数规模,运行在专业的GPU服务器上。它能像一位知识渊博的朋友一样与你交流…...
OAuth 2.1+PKCE 实战指南(附 Python 验证代码)
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
Fish Speech 1.5新手必看:一键部署,轻松实现文本转语音
Fish Speech 1.5新手必看:一键部署,轻松实现文本转语音 1. 认识Fish Speech 1.5 Fish Speech 1.5是由Fish Audio开源的新一代文本转语音(TTS)模型,它基于LLaMA架构与VQGAN声码器,支持零样本语音合成。这意…...
UE5动画开发实战:Modify Curve节点的5种Apply Mode详解(附应用场景)
UE5动画开发实战:Modify Curve节点的5种Apply Mode详解(附应用场景) 在UE5动画开发中,曲线控制是提升角色表现力的关键。Modify Curve节点作为动画蓝图中的重要工具,其五种Apply Mode模式的选择直接影响最终动画效果的…...
SEO 白帽优化的费用一般是多少
SEO 白帽优化的费用一般是多少? 在当今互联网时代,网站的排名直接影响到访问量和商业收益。其中,搜索引擎优化(SEO)是提升网站在搜索结果中排名的重要手段。而在SEO中,白帽优化(White Hat SEO&…...
TurboDiffusion保姆级教程:基于Wan2.1/Wan2.2的AI视频生成快速上手
TurboDiffusion保姆级教程:基于Wan2.1/Wan2.2的AI视频生成快速上手 1. 引言 1.1 为什么选择TurboDiffusion 想象一下,你只需要输入一段文字描述,就能在几秒钟内生成一段高质量的视频。这不是科幻电影里的场景,而是TurboDiffusi…...
CefFlashBrowser终极指南:5个步骤让Flash内容在现代系统重生
CefFlashBrowser终极指南:5个步骤让Flash内容在现代系统重生 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 当Adobe在2020年正式终止Flash Player支持时,无数经典…...
最强30B模型GLM-4.7-Flash实测:Ollama一键部署,小白也能玩转AI
最强30B模型GLM-4.7-Flash实测:Ollama一键部署,小白也能玩转AI 1. GLM-4.7-Flash模型概述 1.1 模型特点与优势 GLM-4.7-Flash是当前30B参数级别中最具竞争力的混合专家模型(MoE)。这个规模特别适合需要平衡性能与资源消耗的实际…...
GHelper:如何用10MB工具取代臃肿的华硕控制中心?
GHelper:如何用10MB工具取代臃肿的华硕控制中心? 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...
