系统求助
man 函数名
man 2 函数名    -    表示函数是系统调用函数
man 3 函数名    -    表示函数是C的库函数    
eg:man fread
    man 2 write 
如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的. 因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明.为了得到write的函数说明 我们要用 man 2 write. 2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数.
 
makefile
注释行以#开头
Makefile中最重要的是描述文件的依赖关系的说明.
一般的格式是: 
target: components 
TAB rule           //TAB处是一个tab键
第一行表示的是依赖关系.
第二行是规则. 
eg:
# 这是上面那个程序的Makefile文件                         <注释>
main:main.o mytool1.o mytool2.o                      <目标:依赖>
    gcc -o main main.o mytool1.o mytool2.o        <规则>
main.o:main.c mytool1.h mytool2.h 
    gcc -c main.c  
mytool1.o:mytool1.c mytool1.h 
    gcc -c mytool1.c  
mytool2.o:mytool2.c mytool2.h 
    gcc -c mytool2.c
 
make执行的时候可以指定要执行的目标:make target
make mytool2.o  //就只会执行  gcc -c mytool2.c这个命令
 
Makefile常用的三个变量:
$@ --    目标文件
$^ --    所有的依赖文件
$< --    第一个依赖文件
 
eg:
# 这是上面那个程序的Makefile文件                         <注释>
main:main.o mytool1.o mytool2.o                      <目标:依赖>
    gcc -o $@ $^                                                  <规则>
main.o:main.c mytool1.h mytool2.h 
    gcc -c $<
mytool1.o:mytool1.c mytool1.h 
    gcc -c $<  
mytool2.o:mytool2.c mytool2.h 
    gcc -c $<
 
Makefile缺省规则:
..c.o:  --    表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于mytool.c
 
eg:
# 这是上面那个程序的Makefile文件                         <注释>
main:main.o mytool1.o mytool2.o                          <目标:依赖>
    gcc -o $@ $^                                                 <规则>
..c.o:
    gcc -c $<
 
 
make
简化编译时所需要下达的指令; 
若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被修改了的档案进行编译,其它的 object file 不会被更动; 最后可以依照相依性来更新( update )执行档。
 
gcc 编译器
gcc -o         输出可执行文件
gcc -c         输出目标代码,执行该命令不会生成可执行文件,gcc -Wall -c, -Wall 为产生更详细的编译过程信息。上面的讯息为警告讯息,
                  gcc -O -c  在编译的时候,依据作业环境给予最佳化执行速度 
gcc -g         编译的时候提供对程序进行调试的信息.
gcc -o -lm    编译时连接libm-开头的库,(去掉前面的lib和后面的版本标志,就剩 下m了所以是 -lm)。
                  -l 是『加入某个函式库(library)』的意思。
                  m 则是 libm.so 这个函式库。
gcc -o -L/home/hoyt/mylib -L指定链接库的路径,系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面 的库,我们可以不指定路径.
eg:要加入包含sin的函数库libm.so, gcc -o -lm -L/lib -L/usr/lib -L/usr/local/lib
  
关于第一行的include文件:
第一行『 #include <stdio.h>』,这行说的是要将一些定义数据由 stdio.h 这个档案读入,这包括 printf 的相关设定。这个档案其实是放置在 /usr/include/stdio.h 的!那么万一这个档案并非放置在这里呢?那么我们就可以使用底下的方式来定义出要读取的 include 档案放置的目录: 
gcc sin.c -lm -I/usr/include    
-I/path 后面接的路径( Path )就是设定要去搜寻相关的 include 档案的目录啦!不过,同样的,默认值是放置在 /usr/include 底下,除非您的 include 档案放置在其它路径,否则也可以略过这个项目!

Linux C相关基础的更多相关文章

  1. Linux 相关基础笔记

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  2. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  3. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  4. (转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结

    1. 学习总结 小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动.我会依次更新在学习小白的博客的过程的感悟和体会. 2.1 内核 ...

  5. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  6. 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念

    linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  7. Linux回归篇-基础恶补

    前言:  LINUX在之前仅仅了解一些皮毛知识,最近计划深入研究大数据,LINUX当然少不了,所以借此良机将LINUX也顺带添加进入学习的目录之中.为了知识的全面性,本文先恶补一下LINUX的基础,作 ...

  8. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 一

    1. Linux的档案权限与目录配置      一.基础知识:             a.分为三类,拥有者(owner).群组(group).其他人(other)             b.三个核 ...

  9. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

随机推荐

  1. VS快速生成JSON数据格式对应的实体

          有固定好的Json数据格式,你还在手动敲对应的实体吗?有点low了!步入正题,这是一个json字符串,先去验证JSON数据格式(http://www.bejson.com/)如下: { & ...

  2. C++中的"未定义的行为"

    2.1 位运算 位运算的运算对象是整数类型的,并且把运算对象看成是一个二进制位的集合.运算对象可以是带符号也可以是无符号.如果是带符号且值为负,那么位运算如何处理运算对象的符号位依赖于机器.而且此时的 ...

  3. csuoj 1391: Boiling Vegetables

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1391 1391: Boiling Vegetables Time Limit: 1 Sec  Me ...

  4. 非常简单的数据,支持excel表格下载功能

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  5. mvc中测试网络

    .//控制器层面 public string IsAnyNetworkAvailable() { try { foreach (NetworkInterface ni in NetworkInterf ...

  6. 用Swift语言做App开发之单元测试

    作为一个有质量保障的应用程序,当然少不了单元测试:Swift开发的App也亦如此,此文将以一个简单的实例来介绍Swift中的单元测试. 这里我们使用XCode模版自带的XCTest框架,此框架包含了一 ...

  7. python中函数接收多余参数

    代码: def fun(x): return x print fun(10) 函数fun(x)接受参数是x,传入数字"10",打印函数的返回值结果 就是10,如果我传递多个参数时, ...

  8. 基于CNN的人脸相似度检测

    人脸相似度检测主要是检测两张图片中人脸的相似度,从而判断这两张图片的对象是不是一个人. 在上一篇文章中,使用CNN提取人脸特征,然后利用提取的特征进行分类.而在人脸相似度检测的工作中,我们也可以利用卷 ...

  9. wex5 实战 登陆帐号更换与用户id一致性

    一 前言 关于用户登陆,注册,页面跳转,我讲了很多,都是页面框架级别的.有人问到这个问题,索性总结一下,今天是收尾最后一篇. 以往初学时的设计是: 1 注册 2 登陆 3 进入页面. 这种很简单,没有 ...

  10. Java:通过反射复制父类字段到子类。

    有些时候需要建立子类继承于父类,尤其是java里面很多类是用mybatis generator生成的.通过父类构造子类,好像很麻烦,要逐个字段进行赋值(反正我没有找到其他好办法). 想到用反射复制的方 ...