Linux下的C开发,可能与win平台的C有点不太一样,但可能不太多,遇到再说吧,我们今天要说的就是GCC的使用技巧(初级的),完全菜鸟级的!!

很多人的感觉,特别是离开win平台,到Linux平台写C代码的时候,熟练VIM编辑器之后,最初写代码的感觉可能是。。。。没啥不一样。或 者感觉也没有传说中那么神秘,没错,我当初也是这个感觉,其实那是因为会的东西太少。。就拿GCC这个来说,有多少菜鸟用的很熟练?用熟练了,就不会用上 面所说的感觉了,只会说同一个字:爽

直接上例子,具体代码不想写太多,因为我也是从别人的代码中拿来的。。。自己做一个总结而已

例如,我们写一个main方法,要实现比较两个整数的大小,分别有两个方法供调用,分别是max(int a,int b)和min(int a,int b),最初的模式,我们一般是把这几个方法写到同一个.c文件中,这个没错,但是如果我们有上千万个这种方法让你调用,你都要自己写到一个文件中?肯定不 合适,最好的方法就是这么多的方法,是来自各个不同人写的,放在不同的文件中,可能是一个方法一个文件,这样单列的,那么我们怎样才能通过gcc调用这些 方法呢?

例如,有min.c,max.c和一个主方法文件hello.c

首先。。

gcc -c max.c

gcc -c min.c

或者:gcc -c max.c min.c

没有错误的话,会产生:

max.o,min.o这两个文件

然后:

gcc max.o min.o hello.c -o hello.out

产生hello.out文件(没错误的前提下)

最后:./hello.out

输出结果

把这个情景脑补成有几万个方法文件。。。光编译也会烦死,弄不好出错了,再重来。。。那么问题来了,怎么办?那就是make工具,这个工具很强 大,强大到我只会用一部分功能,还没有达到哪里不爽改哪里的境界。。好吧,怎么用呢?那就是先定义规则,再make,规则在哪里定义?在Makefile 文件中,怎么写规则呢?

很简单,目标:依赖,下一行TAB缩进之后加命令

#this is makefile

hello.out:max.o min.o hello.c

gcc max.o min.o hello.c -o hello.out

max.o:max.c

gcc -c max.c

min.o:min.c

gcc -c min.c

这就是Makefile文件的内容,然后我们直接shell中执行make命令即可,就可以按照这个规则执行了,那么在第三行中,可能有个问题,就是如果还是有几万个文件让你写上去,岂不是很麻烦?当然有简单的办法。。。Linux就是为懒人设计的。。。改成

#this is makefile

hello.out:max.o min.o hello.c

gcc $^ -o $@

max.o:max.c

gcc -c max.c

min.o:min.c

gcc -c min.c

注意到变化了吗?$^表示所有依赖,就是指的各种.o文件,$@就是指的目标文件,就那么一个,就是上面的hello.out,最会也是 make执行即可,这里的好处是简化了用户输入的复杂性,还有个好处,就是每次更改一个文件的时候,只要.o文件存在,就不会重复编译,从而提高了效率。

顺便提一下Linux的管道,我们知道Linux的IPC(进程间通信)机制主要有:信号,管道,IO重定向,share内存和套接字等,我们 经常使用的就是管道和IO重定向,管道就是“|”,这个竖杠就是管道,重定向就是“>,>,<”和">>"的区别是,一个是覆盖的,另一个是追加到文件后面的,还是说管道,我们写程序的时候,会碰到一种情况,就是上一个 函数的输出就是下个函数的输入,这种情况如果还要重新编程的话,时间效率不高,管道就提供了个很好的方法,但是一定要注意输入和输出啊,起码要保证类型和 数量是一致的才能用,例如,一个avg方法统计平均数(需要输入总和与个数),一个sum方法会根据输入统计出总和和个数,但是这两个方法是来自两个不同 文件的,也就是说最后产生的可执行文件是:avg.out和sum.out(也可以自己定义其他名字,这里只是举例说明),我们想要把sum中的输出直接 放到avg的输入中,怎么办?管道来办,具体方法是命令行输入:./sum.out | ./avg.out,ok执行(这俩文件要放到一个目录里。),就这么简单。。想当初我也不会。。。我傻傻的人工输入。。。后来聪明了,写了个脚本,采集 输出然后按照格式解析出来,再传到目标函数中,尼玛都是不会用管道惹的祸。

后面还要实践gdb和ddd等工具的使用,慢慢学吧,一起加油。

linux系统中用c开发东西可以吗,Linux下的C的开发之GCC的初级使用相关推荐

  1. gparted调整分区大小_CentOS Linux系统中用parted分区命令分区

    CentOS7.3学习笔记总结(二十七)-linux系统中用parted分区命令分区 由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小,它可以处理最常 ...

  2. linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$

    linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$ 参考文章: (1)linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$ (2)https://ww ...

  3. 玩转开发板--Linux系统移植至开发板fl2440实践过程

    一.开发板介绍     CPU:S3C2440(SAMSUNG).ARM920T.400MHz     Pone/mic:耳机和话筒 JTAG:可以通过外部插入直接控制CPU,因此在初始化内存时,起到 ...

  4. linux编译怎么选择cpu,使用cpuminer在Linux系统中用CPU挖矿

    所用的Linux系统是Ubuntu 16.04 LTS 64位版本,以下是使用cpuminer在Linux系统中用CPU挖矿的基本步骤. 1.注册账号 先到MinerGate注册账号,然后到这里就可以 ...

  5. Linux系统详解 第五篇:Linux的安装-4:Fedora 16的安装

    Linux系统详解 第五篇:Linux的安装-4:Fedora 16的安装 前言: 本系列文章取材广泛,有来自于互联网的,有来自教科书的,有来自自己的笔记的,也有来自自己对Linux的经验积累的.此系 ...

  6. Linux系统运维与架构设计之Linux概述

    Linux系统运维与架构设计之Linux概述 Linux系统运维与架构设计 1.1 浅谈计算机系统 1.1.1 计算机硬件系统 现代计算机是基于冯·诺依曼体系结构,由运算器.控制器.存储器.输入设备. ...

  7. Linux系统移植:官板 uboot 修改(下)

    文章目录 Linux系统移植:官板 uboot 修改(下) 一.LCD 驱动修改 二.网口驱动修改 2.1 PHY 地址修改 2.2 删除 uboot 中 74LV595 的驱动代码 2.3 添加 I ...

  8. Linux系统中的软件管理详解(下)—搭建网络软件仓库及第三方软件仓库

    Linux系统中的软件管理详解(下) 5.软件仓库管理命令 a)dnf 命令: 管理软件仓库中的安装包 dnf repolist ##列出仓库信息clean all ##清除系统中已经加载的仓库缓存信 ...

  9. linux 文件和打印机共享文件夹,能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( )...

    能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( ) 答:SAMBA HTML 代 码 表示() 答:创建一个单选框 根据凯恩思的理论,在短期中总供给线为一条水平线,当总需 ...

最新文章

  1. 安全设置之修改远程桌面连接默认3389端口
  2. Makefile实例分析
  3. CodeBlocks的一些用法和常见的问题
  4. Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试
  5. Teleport 开源堡垒机的使用
  6. 适用于JDeveloper 11gR2的Glassfish插件
  7. [Linux]Ubuntu下用apt-get安装的应用程序位置
  8. 【Flink】基于 Flink CEP 实时计算商品订单流失量
  9. C/C++语言学习的策略
  10. oracle 查询当年数据_查询ORACLE数据库TOP SQL使用情况
  11. tensorflow自定义op_TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
  12. .NET报表控件ActiveReports 教程:应用系统中如何完成各种报表系统的需求
  13. 7. F1方程式冠军
  14. Scrum立会报告+燃尽图(十月二十七日总第十八次)
  15. linux下装go环境
  16. 驾驶员理论考试系统的设计与实现(论文+源码)_kaic
  17. Mac操作系统下重装 Mac os X 系统
  18. 用户抱怨苹果一体机进灰 苹果称中国环境不好
  19. H5 canvas 画圆 画圆角
  20. Apache Hadoop KMS 部署

热门文章

  1. 通过确定性机会“捡钱”
  2. ubuntu下访问支付宝官网,安装安全控件
  3. 求助求助给win10安装智能abc结果电脑废了
  4. 电动两轮车驶入“年轻化”新赛道,新老品牌谁能率先突围?
  5. 【Java】-【使用smtp协议发邮件】
  6. 聊聊直播平台背后的技术架构
  7. 我的日记本开发手记(2)——配色
  8. QT 超级日记本程序
  9. 纸球的40种折法_怎么做纸球的折法步骤图解
  10. IOS企业签名和IOS免签名打包的区别是什么?