CFLAGS
-fvisibility=hidden
在linux下,源文件中的所有函数都有一个默认的visibility属性为public,在编译命令中加入-fvisibility=hidden参数,会将所有默认的public的属性变为hidden。此时,如果对函数设置__attribute__ ((visibility(“default”)))参数,使特定的函数仍然按默认的public属性处理,则-fvisibility=hidden参数不会对该函数起作用。所以,设置了-fvisibility=hidden参数之后,只有设置了__attribute__ ((visibility(“default”)))的函数才是对外可见的,如此则效果等同于Visual Studio下的__declspec(dllexport)定义。
-g
产生符号调试工具(GNU的 gdb)所必要的符号信息。想要对源代码进行调试,就必须加入这个选项
-Wall
生成所有警告信息
-O
对程序进行优化编译、链接。采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、链接的速度就相应地要慢一些,而且对执行文件的调试会产生一定的影响,造成一些执行效果与对应源文件代码不一致等一些令人“困惑”的情况。因此,一般在编译输出软件发行版时使用此选项
-O2
比 -O 更好的优化编译、链接。当然整个编译链接过程会更慢。
LDFLAGS
-lc
-lc 是link libc.so
主要包括C标准库函数和系统函数,几乎所有C程序的运行都依赖于libc.so
-lm
-lm 是link libm
主要包含数学计算的库
-lpthread
主要包含线程相关的库
-lz
-lz 是link libz
一个免费的、通用的、合法的、不受任何专利限制的无损数据压缩库,可用于几乎任何计算机硬件和操作系统
-ldl
Linux 系统 如果你的程序中使用dlopen、dlsym、dlclose、dlerror 显示加载动态库,需要设置链接选项
本文详细介绍了Makefile中的优化标志和链接库配置,包括-fvisibility=hidden、-g、-Wall、-O、-O2等编译选项的作用及应用场景,以及libc、libm、pthread、libz和libdl等链接库的功能与用途。
977

被折叠的 条评论
为什么被折叠?



