linux系统中用c开发东西可以吗,Linux下的C的开发之GCC的初级使用
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的初级使用相关推荐
- gparted调整分区大小_CentOS Linux系统中用parted分区命令分区
CentOS7.3学习笔记总结(二十七)-linux系统中用parted分区命令分区 由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小,它可以处理最常 ...
- linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$
linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$ 参考文章: (1)linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$ (2)https://ww ...
- 玩转开发板--Linux系统移植至开发板fl2440实践过程
一.开发板介绍 CPU:S3C2440(SAMSUNG).ARM920T.400MHz Pone/mic:耳机和话筒 JTAG:可以通过外部插入直接控制CPU,因此在初始化内存时,起到 ...
- linux编译怎么选择cpu,使用cpuminer在Linux系统中用CPU挖矿
所用的Linux系统是Ubuntu 16.04 LTS 64位版本,以下是使用cpuminer在Linux系统中用CPU挖矿的基本步骤. 1.注册账号 先到MinerGate注册账号,然后到这里就可以 ...
- Linux系统详解 第五篇:Linux的安装-4:Fedora 16的安装
Linux系统详解 第五篇:Linux的安装-4:Fedora 16的安装 前言: 本系列文章取材广泛,有来自于互联网的,有来自教科书的,有来自自己的笔记的,也有来自自己对Linux的经验积累的.此系 ...
- Linux系统运维与架构设计之Linux概述
Linux系统运维与架构设计之Linux概述 Linux系统运维与架构设计 1.1 浅谈计算机系统 1.1.1 计算机硬件系统 现代计算机是基于冯·诺依曼体系结构,由运算器.控制器.存储器.输入设备. ...
- Linux系统移植:官板 uboot 修改(下)
文章目录 Linux系统移植:官板 uboot 修改(下) 一.LCD 驱动修改 二.网口驱动修改 2.1 PHY 地址修改 2.2 删除 uboot 中 74LV595 的驱动代码 2.3 添加 I ...
- Linux系统中的软件管理详解(下)—搭建网络软件仓库及第三方软件仓库
Linux系统中的软件管理详解(下) 5.软件仓库管理命令 a)dnf 命令: 管理软件仓库中的安装包 dnf repolist ##列出仓库信息clean all ##清除系统中已经加载的仓库缓存信 ...
- linux 文件和打印机共享文件夹,能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( )...
能实现Windows和Linux系统之间文件和打印机共享的Linux服务是( ) 答:SAMBA HTML 代 码 表示() 答:创建一个单选框 根据凯恩思的理论,在短期中总供给线为一条水平线,当总需 ...
最新文章
- 安全设置之修改远程桌面连接默认3389端口
- Makefile实例分析
- CodeBlocks的一些用法和常见的问题
- Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试
- Teleport 开源堡垒机的使用
- 适用于JDeveloper 11gR2的Glassfish插件
- [Linux]Ubuntu下用apt-get安装的应用程序位置
- 【Flink】基于 Flink CEP 实时计算商品订单流失量
- C/C++语言学习的策略
- oracle 查询当年数据_查询ORACLE数据库TOP SQL使用情况
- tensorflow自定义op_TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
- .NET报表控件ActiveReports 教程:应用系统中如何完成各种报表系统的需求
- 7. F1方程式冠军
- Scrum立会报告+燃尽图(十月二十七日总第十八次)
- linux下装go环境
- 驾驶员理论考试系统的设计与实现(论文+源码)_kaic
- Mac操作系统下重装 Mac os X 系统
- 用户抱怨苹果一体机进灰 苹果称中国环境不好
- H5 canvas 画圆 画圆角
- Apache Hadoop KMS 部署