Linux(六)

news2024/11/16 21:22:11

Linux(六)

  • 自定义头文件
    • 自定义头文件中写什么
    • 如何引入头文件
    • 条件编译
      • 条件编译作用
  • gcc工作原理
  • Make 工作管理器
    • 什么是Make
    • 什么是Makefile/makefile
    • Makefile假目标
    • Makefile中的变量
      • 自定义变量
      • 预定义变量
      • 自动变量
    • Makefile中变量展开方式
      • 递归展开方式
      • 简单展开方式
    • 嵌套的Makefile

自定义头文件

自定义头文件中写什么

//1.引入库头文件
//2.宏定义
//3.数据类型的定义
//4.枚举类型的定义
//5.函数声明

在这里插入图片描述

如何引入头文件

#include <stdio.h> // <> 表示从系统库路径开始引入头文件 (引入库头文件)
#include "stu.h" //"" 表示从当前工作目录引入头文件 (引入自定义头文件)

在这里插入图片描述

条件编译

#ifndef 标号(一般和头文件同名)
#define 标号
//1.引入库头文件
//2.宏定义
//3.数据类型定义
//4.枚举定义
//5.函数声明
#endif

条件编译作用

避免头文件被重复引入

#ifndef _STU_H
#define _STU_H
//1.引入库头文件
//2.宏定义
//3.数据类型定义
//4.枚举定义
//5.函数声明
//1.引入库头文件
#include <stdlib.h>
//2.宏定义
#define N 5
#define M 20
//3.数据类型定义
//1.定义一个结构体数据类型,并取别名
typedef struct student
{
char name[M];
int height;
}Stu;
//4.枚举定义
//5.函数声明
void menu(void);
void input(Stu * ps,int size);
void output(Stu * ps,int size);
Stu * calpMax(Stu *ps,int size);
Stu * calpMin(Stu *ps,int size);
void swap(Stu * pMax,Stu * pMin);
void sortByHeight(Stu * ps,int size);
#endif

gcc工作原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Make 工作管理器

什么是Make

Make是一个工具程序,它是一种转换文件形式的工具,转换的目标称为叫target.
在许多现代软件的开发中,集成开发环境已经取代了Make,但是在Unix环境中,仍然有许多任务工程师采用Make来协助软件开发.从事嵌入式系统开发,如果不能驾驭Makefile,那很难做到游刃有余。
在这里插入图片描述

什么是Makefile/makefile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Makefile假目标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Makefile中的变量

自定义变量

在这里插入图片描述

预定义变量

Makefile中预定义变量包含了常见编译器,汇编器的名称及其编译选项
CC :C编译器的名称,默认值为cc
在这里插入图片描述

自动变量

$^ 规则中的所有选择条件(所有依赖文件)
$< 规则中的第一个先决条件(第一个依赖文件)
$@ 目标文件

在这里插入图片描述

Makefile中变量展开方式

递归展开方式

在这里插入图片描述

简单展开方式

在这里插入图片描述

嵌套的Makefile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CC:=gcc
SUBDIRS:= f1 f2 main obj
OBJS:=f1.o f2.o main.o
BIN:=myapp
OBJS_DIR:=obj
BIN_DIR:=bin
export CC OBJS BIN OBJS_DIR BIN_DIR
all: CHECK_DIR $(SUBDIRS)
CHECK_DIR:
mkdir -p $(BIN_DIR)
$(SUBDIRS):ECHO
make -C $@
ECHO:
@echo $(SUBDIRS)
@echo begin compile
CLEAN:
$(RM) $(OBJS_DIR)/*.o
rm -rf $(BIN_DIR)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1697839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】 如何使用.whl文件安装Python包?

基本原理 在Python的世界中&#xff0c;.whl文件是一种分发格式&#xff0c;它代表“Wheel”。Wheel是一种Python包格式&#xff0c;旨在提供一种快速、可靠且兼容的方式&#xff0c;用于安装Python库。与源代码包相比&#xff0c;Wheel文件是预编译的&#xff0c;这意味着它们…

【2024.5.26 软件设计师】记录第一次参加软考(附资料)

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 文章目录 前言考试分析选择题案例分析题话外 软考总结资料 前言 这是我第一次参加软考&#xff0c;其实我并…

家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)

家乡特色推荐系统 目录 基于SprinBootvue的家乡特色推荐系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

京东Java社招面试题真题,最新面试题

Java中接口与抽象类的区别是什么&#xff1f; 1、定义方式&#xff1a; 接口是完全抽象的&#xff0c;只能定义抽象方法和常量&#xff0c;不能有实现&#xff1b;而抽象类可以有抽象方法和具体实现的方法&#xff0c;也可以定义成员变量。 2、实现与继承&#xff1a; 一个类…

SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)

一、问题描述&#xff1a; 当/etc/selinux/conf被要求必须是SELINUXenforcing&#xff0c;不被允许使用setenforce 0宽松模式 我们启动httpd就会报错&#xff1a; Job for httpd.service failed because the control process exited with error code. See "systemctl s…

STM32-GPIO八种输入输出模式

图片取自 江协科技 STM32入门教程-2023版 细致讲解 中文字幕 p5 【STM32入门教程-2023版 细致讲解 中文字幕】 https://www.bilibili.com/video/BV1th411z7sn/?p5&share_sourcecopy_web&vd_source327265f5c70f26411a53a9226af0b35c 目录 ​编辑 一.STM32的四种输…

excel表格写存神器--xlwt

原文链接&#xff1a;http://www.juzicode.com/python-tutorial-xlwt-excel 在 Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd&#xff0c;今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头&#xff0c;rd是read的简写…

Elasticsearch的Index sorting 索引预排序会导致索引数据的移动吗?

索引预排序可以确保索引数据按照指定字段的指定顺序进行存储&#xff0c;这样在查询的时候&#xff0c;如果固定使用这个字段进行排序就可以加快查询效率。 我们知道数据写入的过程中&#xff0c;如果需要确保数据有序&#xff0c;可能需要在原数据的基础上插入新的数据&#…

slint esp32 tokio

源码&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;触摸是 xpt2046&#xff0c;使用 spi 半双工 不使用DMA&#xff08;esp-rs还没支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新为1.5…

HTTP交互导致ECONNABORTED的原因之一

背景&#xff1a; 本次记录的&#xff0c;是一次使用HTTP交互过程中遇到的问题&#xff0c;问题不大&#xff0c;就是给题目上这个报错补充一种可能的解决方案。 程序大致流程&#xff1a; 1. 设备向服务器A请求信息 2. 拿到回复记录下回复内容中的数据包下载地址等信息 3…

sql聚合函数使用-笔记

sql聚合函数使用-笔记 SELECT SUM ( case when procurement_type 公益推送 then 1 else 0 end ) gywxTotal,SUM ( CASE WHEN (status 1 and procurement_type 公益推送) THEN 1 ELSE 0 END ) gywxYsc,SUM ( CASE WHEN (status ! 1 and procurement_type 公益推送) THEN 1 …

k8s部署presto

&#xff08;作者&#xff1a;陈玓玏&#xff09; 一、前提条件 已部署k8s&#xff1b;已部署hadoop和hive&#xff0c;可参考以下链接&#xff1a; https://blog.csdn.net/weixin_39750084/article/details/136750613?spm1001.2014.3001.5502 https://blog.csdn.net/wei…

Visual Studio 的调试(一)

最近事儿很多昂&#xff0c;更新速度相较以往慢了许多&#xff0c;备考六月份的四级&#xff0c;还有学校的期末等等&#xff0c;事儿真的太多啦&#xff0c;所以后面的更新速度也会放慢一点&#xff0c;实在是抽不开身啊诸位&#xff0c;相当抱歉&#xff0c;还望诸君见谅 言…

Dockerfile文件详细介绍

前言 Dockerfile是一个文本文件&#xff0c;包含了用于构建Docker镜像的所有命令和说明。它定义了容器的运行环境、依赖以及启动方式&#xff0c;是创建Docker镜像的核心部分。 由于制作镜像的过程中&#xff0c;需要逐层处理和打包&#xff0c;比较复杂&#xff0c;所以Docke…

Midjourney Describe API 使用文档

Midjourney Describe API 使用文档 Midjourney Describe API 的主要功能是通过上传图片&#xff0c;获取对图片的描述。使用该 API&#xff0c;只需要传递图片文件&#xff0c;API 会返回图片的详细描述。无需繁琐的参数设置&#xff0c;即可获得高质量的图片描述。 支持多种图…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

陪跑真正值钱的不是教程,是你遇到那个挡住你的问题时,身边有个靠谱的人

今天分享两个概念&#xff0c;一个是意识决定一切&#xff0c;一个是大道至简&#xff0c;做项目就是按部就班的遵循事情发展规律去做。 先说第一个概念&#xff0c;意识决定一切。我们说的凡事预则立不预则废&#xff0c;就是计划了去做就会有结果。 给你们一个表&#xff0c;…

力扣:1738. 找出第 K 大的异或坐标值

1738. 找出第 K 大的异或坐标值 给你一个二维矩阵 matrix 和一个整数 k &#xff0c;矩阵大小为 m x n 由非负整数组成。 矩阵中坐标 (a, b) 的 值 可由对所有满足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下标从 0 开始计数&…

简单的UDP网络程序:多人群聊系统

本章重点 能够实现一个简单的udp客户端/服务器; 1.创建套接字 我们把服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上初始化服务器&#xff0c;而初始化服务器需要做的第一件事就是创建套接字。 ⭐参数说明&#xff1a; domain&#xff1a;创建套接字的域…