Makefile编译选项:CFLAGSLDFLAGSLIBS

Posted 趣多多代言人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile编译选项:CFLAGSLDFLAGSLIBS相关的知识,希望对你有一定的参考价值。

目录

一、CFLAGS

二、LDFLAGS

三、LIBS

四、参考资料


前言

本文只涉及cflags、ldflags、libs,关于makefile文件非常建议看看大神写的系列博客《跟我一起写Makefile》:

跟我一起写 Makefile(一)_haoel的博客-CSDN博客

一、CFLAGS

指定.h文件路径,如:CFLAGS=-I./include I../test/include。

CFLAGS表示用于C编译器的选项,CXXFLAGS表示用于C++编译器的选项

CFLAGS标志参数说明

类别

名称

说明

编译选项

-S

只是编译不汇编,生成汇编代码

-E

只进行预编译,不做其他处理

-g

在可执行程序中包含标准调试信息

-o file

把产生文件输出到file里去

-v

打印出编译器内部编译过程的命令行信息和编译器的版本

-I dir

在头文件搜索路径列表中添加dir目录

-L dir

在库文件的搜索路径列表中添加dir目录

告警和出错选项-ansi支持符合ANSI标准的C程序
-pedantic允许发出ANSI C标准所列的全部警告信息
-pedantic -error允许发出ANSI C标准所列的全部错误信息
-w关闭所有告警
-Wall允许发出gcc提供的所有有用的报警信息
-werror把所有的告警信息转化为错误信息,并在告警发生时终止编译过程
优化选项-Onn是代表优化级别的整数
体系结构选项-mcpu=type

针对不同的CPU使用相应的CPU指令。可选择的type有i386、i486、pentium及i686

-mieee-fp使用IEEE标准进行浮点数的比较
-mno-ieee-fp不使用IEEE标准进行浮点数的比较
-msoft-float输出包含浮点库调用的目标代码
-mshort把int类型作为16位处理,相当于short int
-mrtd强行将函数参数个数固定的函数用ret NUM返回,节省调用函数的一条指令

二、LDFLAGS

编译器的优化参数,也可指定库文件位置,如:LDFLAGS=-L/usr/lib

三、LIBS

要链接的库文件,如:LIBS=-lpthread

四、参考资料

Makefile选项CFLAGS,LDFLAGS,LIBS - Taskiller - 博客园

CFLAGS详解_xinyuan0214的博客-CSDN博客_cflags编写makefile

Makefile选项CFLAGS,LDFLAGS,LIBS

CFLAGS 表示用于 C 编译器的选项,

CXXFLAGS 表示用于 C++ 编译器的选项。
这两个变量实际上涵盖了编译和汇编两个步骤。

CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。

LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。

LIBS:告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv

简单地说,LDFLAGS是告诉链接器从哪里寻找库文件,而LIBS是告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。

有时候LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给"-Wl,R":

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如果在执行./configure以前设置环境变量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意设置环境变量等号两边不可以有空格,而且要加上引号(shell的用法)。那么执行configure以后,Makefile将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

以上是关于Makefile编译选项:CFLAGSLDFLAGSLIBS的主要内容,如果未能解决你的问题,请参考以下文章

如何在eclipse makefile项目的编译器选项中设置-std=c++0x?

Makefile选项CFLAGS,LDFLAGS,LIBS

什么时候应该在 Makefile 中使用 -c 或 -o GCC 选项?

CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍

Makefile选项CFLAGS,LDFLAGS,LIBS

Makefile选项CFLAGS,LDFLAGS,LIBS