LOCAL_CFLAGS参数说明

其实

CFLAGS += -D__MT2625_ENABLED__

这个CFLAGS是gcc编译的选项,在makefile中用CFLAGS这个变量来表示这个编译选项。

1、-Wall

是打开警告开关

2、-O

代表默认优化,可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化

3、-g

是生成调试信息,生成的可执行文件具有和源代码关联的可调试的信息

4、-fopenmp

OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案(Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。

5、-D

增加全局宏定义

6、-ffast-math

浮点优化选项 -ffast-math:极大地提高浮点运算速度

7、-mfloat-abi=softfp 浮点运算

  • GCC编译选项CFLAGS参数
  • GCC链接选项LDFLAGS参数
  • 实例

最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、静态库、动态库等增加、删除;文件搜索路径等的修改就没法下手了,因此下定决心必须对我比较关注的地方进行深度学习,知其然还要知其所以然,知道怎么从无到有写出来,而且别人的makefile还要知道怎么根据需求的变化进行修改。但这不是一步就能能达到的,咱还是先全面理解别人写的makefile开始吧。
关于makefile的依赖规则以及目标生成的步骤,这篇先不介绍,这里主要关注我在看makefile时遇到的一堆CFLAGS与LDFLAGS定义进行说明。
费了牛劲,才查到GNUmake中文手册中关于CFLAGS与LDFLAGS的说明,他们都是是隐含规则的变量,且是一种命令参数变量;然后又到GCC手册中查找有哪些编译选项。
makefile内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。这些变量允许对它进行修改:在Makefile中、通过命令行参数或者设置系统环境变量的方式来对它进行重定义。无论是用那种方式,只要make在运行时它的定义有效,make的隐含规则都会使用这些变量。

GCC编译选项CFLAGS参数

选项 说明
-c 用于把源码文件编译成 .o 对象文件,不进行链接过程
-o 用于连接生成可执行文件,在其后可以指定输出文件的名称
-g 用于在生成的目标可执行文件中,添加调试信息,可以使用GDB进行调试
-Idir 用于把新目录添加到include路径上,可以使用相对和绝对路径,“-I.”、“-I./include”、“-I/opt/include”
-Wall 生成常见的所有告警信息,且停止编译,具体是哪些告警信息,请参见GCC手册,一般用这个足矣!
-w 关闭所有告警信息
-O 表示编译优化选项,其后可跟优化等级0\1\2\3,默认是0,不优化
-fPIC 用于生成位置无关的代码
-v (在标准错误)显示执行编译阶段的命令,同时显示编译器驱动程序,预处理器,编译器的版本号

GCC链接选项LDFLAGS参数

选项 说明
-llibrary 链接时在标准搜索目录中寻找库文件,搜索名为liblibrary.a 或 liblibrary.so
-Ldir 用于把新目录添加到库搜索路径上,可以使用相对和绝对路径,“-L.”、“-L./include”、“-L/opt/include”
-Wl,option 把选项 option 传递给连接器,如果 option 中含有逗号,就在逗号处分割成多个选项
-static 使用静态库链接生成目标文件,避免使用共享库,生成目标文件会比使用动态链接库大

实例

CFLAGS = -g -Wall -I./include -I./include/tinyalsa -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc
LDFLAGS = -L./lib
ALL:$(CC) $(CFLAGS) $(LDFLAGS) main.c gfifo.c queue.c usbmonitor.c socket_rcv_360_server.c ./lib/srs_librtmp.a ./lib/libcrypto.a ./lib/libssl.a ./lib/libtinyalsa.a -o media_record -static -ldl -lstdc++ -lm -lpthread
clean:rm media_record *.raw *.mp4 *.wav -rfCFLAGS = -g -Wall -I./include -I./include/tinyalsa -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc
-g:生成调试信息
-Wall:输出全部的告警信息
-I./include:添加头文件搜索目录./include
-I./include/tinyalsa:添加头文件搜索目录./include/tinyalsa
-Wl,--whole-archive -lpthread:将libpthread.so及以后的库中的所有符号都链接进可执行目标文件
-Wl,--no-whole-archive:关闭之前的-Wl,--whole-archive -lpthread 选项
LDFLAGS = -L./lib,将makefile当前目录下的、lib文件夹添加到库文件搜索目录$(CC):makefile隐含变量,默认选择gcc编译器
$(CFLAGS):引用之前定义的CFLAGS变量,即编译选项参数
$(LDFLAGS):引用之前定义的LDFLAGS变量,即链接参数$(CC) $(CFLAGS) $(LDFLAGS) main.c gfifo.c queue.c usbmonitor.c socket_rcv_360_server.c ./lib/srs_librtmp.a ./lib/libcrypto.a ./lib/libssl.a ./lib/libtinyalsa.a -o media_record -static -ldl -lstdc++ -lm -lpthread
使用定的编译器、编译选项参数、链接选项参数,编译.c文件,并使用静态方式链接制定的库文件,以及编译器目录下的libdl.a、libstdc++.a、libm.a、libpthread.a库文件生成 media_record 可执行目标文件。

经过这几天的研究,已经对arm-linux-guneabi-gcc的一些编译选项、链接选项有一定的了接,现在可以写一些简单的makefile了,自己可以感觉到一点进步了,再接再厉吧。

Makefile:GCC CFLAGS变量和LDFLAGS变量相关推荐

  1. Makefile之cflags参数和ldflags参数

    GCC编译选项CFLAGS参数 选项          说明 -c              用于把源码文件编译成 .o 对象文件,不进行链接过程 -o              用于连接生成可执行文 ...

  2. Makefile选项CFLAGS LDFLAGS LIBS

    FLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项. 这两个变量实际上涵盖了编译和汇编两个步骤. CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS ...

  3. Makefile选项 CFLAGS LDFLAGS

    makefile内嵌隐含规则的命令中,所使用的变量都是预定义的变量.我们将这些变量称为"隐含变量".这些变量允许对它进行修改:在Makefile中.通过命令行参数或者设置系统环境变 ...

  4. Makefile选项CFLAGS,LDFLAGS,LIBS

    CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项. 这两个变量实际上涵盖了编译和汇编两个步骤. CFLAGS: 指定头文件(.h文件)的路径,如:CFLAG ...

  5. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  6. makefile的两个变量(自动变量和普通变量)

    (1)普通变量 如: obj=main.o add.o sub.o mul.o div.o //将后面的值赋值给obj,obj就是一个普通变量 target=zsx  //将zsx赋值给target ...

  7. Go:编译构建时 ldflags 变量注入

    Go:编译构建时 ldflags 变量注入 1.变量注入 Go在编译构建时,可以注入变量,例如: package mainimport "fmt"var Version = &qu ...

  8. Problem 59 GCC密切相关的一些环境变量?

    Problem59 GCC密切相关的一些环境变量? Ans: 环境变量 描述 TMPDIR Thisvariable shows location of temporary file location ...

  9. 最新gcc下载和linux环境变量设置

    最新gcc下载和linux环境变量设置 一.gcc下载 提供最新gcc下载路径:点这里跳转 http://ftp.gnu.org/gnu/gcc/ 安装 /gcc_package/configure ...

最新文章

  1. php文章远程图片,php保存远程图片到本地 php正则匹配文章中的远程图片地址
  2. WCF duplex service + silverlight 聊天代码
  3. RabbitMQ—集群原理
  4. Android无需权限保存文件,即使使用用户权限,也无法在外部存储上保存文件[Android]...
  5. 计算机里的网络是什么意思啊,计算机网络中本地站点是什么意思
  6. 2014计算机二级vfp,2014计算机二级VF考前试题解析
  7. Uber 宣布将香港最低打车费用上涨 80%, 最低 45 港币
  8. group by rollup | cube 学习
  9. 时序分析基本概念介绍<input/output delay>
  10. python界面-(八)Python 图形化界面设计
  11. P3052 [USACO12MAR]【摩天大楼里的奶牛(Cows in a Skyscraper)】
  12. 扫描微信二维码实现快速登录
  13. centerOS 7.6FTP安装与配置
  14. 计算机log是代表什么,Log是什么文件?Log文件可以删除吗?
  15. 软件工程导论——软件工程介绍
  16. unit怎么发音_“unit”怎么读?
  17. 删除服务器tomcat上项目,删除tomcat服务器
  18. 黑苹果之联想Y430P亮度记忆功能
  19. 爸妈老了而我还未长大--《Coraline》观后感
  20. c语言在尾部添加新节点,在单链表最后插入节点

热门文章

  1. PyQt5-多窗口数据传输
  2. 巧用margin/padidng的百分比值占位,避免闪烁
  3. IE9下透明度设置无效
  4. Python之旅Day6 模块应用
  5. leetcode 之Rotate List(18)
  6. JDK5.0新特性系列---11.5.4线程 同步装置之Exchanger
  7. ELK官方文档收集Kibana监视数据编辑
  8. MV从命令行同时移动多种文件类型的小技巧
  9. 关于java代码中的注释问题。(类中方法的注释,我们一般都要写上这个方法的文档(doc),方法的参数也要有它的文档)
  10. usleep头文件_Linunx的sleep,usleep,select,nonasleep对比与应用