栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux中使用gcc编译的简单指令和makefile编写的入门级规则

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux中使用gcc编译的简单指令和makefile编写的入门级规则


使用gcc进行编译链接
    #仅仅将源码编译成目标文件,不进行链接
    gcc -c hello.c
    #生成hello.o文件,不会生成可执行文件
    
    #加入编译优化
    gcc -O hello.c -c
    #生成hello.o文件,不会生成可执行文件
    
    #编译链接生成可执行文件
    gcc hello.c -lm -L/usr/bin -I/usr/include
    #生成可执行文件a.out
    #-lm 表示libm.so或libm.a 函数库文件
    #-L 后面接的是指定的函数库搜索路径
    #-I 后边接的是指定的include包含库搜索路径
    
    #将编译的结果输出为某个文件名
    gcc -o helloname hello.c
    #生成可执行文件helloname
    
    #输出更多编译过程中的信息
    gcc -o helloname hello.c -Wall
    #-Wall表示 输出详细的警告信息

makefile的一些基本语法规则
  target : 目标文件1 目标文件2 目标文件3 .....
  	gcc -o 希望建立的可执行文件名 目标文件1 目标文件2 目标文件3 .....

例如:

  mian: main.o haha.o sin_value.o cos_value.o
          gcc -o main main.o haha.o sin_value.o cos_value.o -lm

其中makefile文件中可以设定多个target

  mian: main.o haha.o sin_value.o cos_value.o
          gcc -o main main.o haha.o sin_value.o cos_value.o -lm
  #clean是第二个目标(名字可以自定义)
  clean:
          rm -f main main main.o haha.o sin_value.o cos_value.o

在使用的时候通过make确定执行哪个目标

  make main #表示执行第一个目标main
  make clean #表示执行第二个目标clean
  make clean main #表示先执行main 再执行clean

也可以使用变量${变量}或 $ (变量)

  #定义一个变量LIBS和OBJS
  LIBS = -lm
  OBJS = main.o haha.o sin_value.o cos_value.o
  #使用变量的方式 ${变量}或$(变量)
  #$@为特殊变量,表示当前目标,因此下文中的$@表示main
  mian: ${OBJS}
          gcc -o $@ ${OBJS} ${LIBS}
  clean:
          rm -f main ${OBJS}

也可以在命令行中直接定义变量

  >> CFLAGS="-Wall" make clean main
  #执行之后,makefile中的CFALGS就会替换成 -Wall
  LIBS = -lm
  OBJS = main.o haha.o sin_value.o cos_value.o
  
  mian: ${OBJS}
          gcc -o $@ ${OBJS} ${LIBS} -${CFLAGS}
  clean:
          rm -f main ${OBJS}

变量的优先级

​ ①命令行中添加的变量

​ ②makefile文件中定义的变量

​ ③shell环境中的变量


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号