makefile的选项CFLAGS,CPPFLAGS,LDFLAGS和LIBS的区别

makefile的选项CFLAGS,CPPFLAGS,LDFLAGS和LIBS的区别,第1张

LDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。

网上不难搜索到上面这段话。不过“告诉ld怎么吃”是什么意思呢?

看看如下选项:

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib

LIBS = -lmysqlclient -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后,make项目时提示错误“Makefile:3: *** missing separator. Stop.”

偶然发现这个错误是有makefile中的tab的长度导致的,在makefile中的命令需要以tab键开始,

在.vimrc文件中发现没有设置tab键的默认长度,然后在.vimrc中添加如下配置后,

set tabstop=4

便可以执行makefile了, 但是后来发现不管再次把tabstop设置成8还是注释掉这个配置,makefile都可以执行,很奇怪,不知道为什么?

这是从 网络上搜索到的 看看对你是否用用???????


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11268157.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存