makefile 区别的选项LDFLAGS和LIBS的区别

关于Makefile文件的一系列问题_百度知道
关于Makefile文件的一系列问题
rm -f *?怎么等这么多的;arm-linux/这句什么意思? cp -rfv $(TARGET) /includeINC1 =$(ROOT)/mnt echo &libINC =$(ROOT)/arm-linux&#47、;lib&#47? -static是什么意思;/怎么可以等两个路径的;arm-linux/libpng12CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1)
-static &#47?STRIP=arm-linux-stripTARGET = tom_ACDC_02SRCS :
$(CC) $(WEC_LDFLAGS) $(SRCS) -o $(TARGET) $(LIBS)
&#47.c control.c communication。跪求大神.c gprs.SUFFIXES .map rm -f temp rm -f *;clean、大侠解决.2LIB = $(ROOT)/local&#47.o
rm -f *.img rm -f $(TARGET)
rm -f *;为什么要清除这些呢.2.sROOT = &#47.usr&#47.arm_linux_4;这句什么意思.c font.c filesystem.c lcm? 源文件都没有的? -l和-L和-I有什么区别? $(STRIP) $(TARGET)
&#47.c touch?WEC_LDFLAGS=-I$(LIB) -I$(LIB1)&#47: ;arm-linux/$(LIBS)这个干嘛的;/include/&#47:=
tom_ACDC.4;&#47.x .gdb&#47.c uart_Please also copy input patterns to storage&&#47.flat rm -f *:”分开的吗.1LIB1 =$(ROOT)/gcc&#47: rm -f *.c LIBS= -lpthread -lc -lgcc -liconv -lfreetype -lpng -lz -lm -ljpeg -lgif&#47?all?两个路径之间不是用“;这句什么意思;&#47下面是Makefile里的全部源代码、
提问者采纳
要是不这样.c gprs.c communication。而-I(大写i)指定了编译时的头文件搜索目录.all,连接时所有库的选项。all.,这个工作目标平时是不执行的只有你在用make clean这样来运行make的时候才会执行这个工作目标,是可以用一辈子的东西,我猜你抄错了吧这里看着就应该是-L$(LIB) -L$(LIB1)然后&nbsp? 源文件都没有的。可以把它看成一个字符串。至于你问的-l和-L的区别 -llibrary指定连接某一个库,默认是连接共享库。6-static 这个选项。其实CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1) &nbsp,如果同时存在静态库和共享库.2。<file fsid="143" link="/share/link.这种语法在makefile里面很常用;$(WEC_LDFLAGS)展开了这个变量WEC_LDFLAGS=-I$(LIB) -I$(LIB1) 其实是指定了库目录.c rtc,再调用arm-linux-strip来去掉目标文件中的调试信息;&quot,这个dir就是目录的名称.c filesystem,也很简单就是单纯的清除中间文件而已; ,到此?shareid=&uk=" name="GNU+Make项目管理(第三版),分开定义然后展开是为了方便大家扩展.c control:
$(CC) $(WEC_LDFLAGS) $(SRCS) -o $(TARGET) $(LIBS) &nbsp. rm -f *; -static&nbsp,当gcc连接库的时候;tom_ACDC_02&nbsp,谁看了都得晕。GUNmake太博大精深了,减小文件大小;-lpthread -lc -lgcc -liconv -lfreetype -lpng -lz -lm -ljpeg -lgif 这就是展开后实际运行的命令,如果要深入了解.2/lib/gcc/arm-linux/4;tom_ACDC_02这句的用处就是在4里面命令编译连接生成目标文件tom_ACDC_02后.o ,就类似于sprintf(WEC_LDFLAGS,而指定了-static 就优先连接静态库;tom_ACDC,是定义了一个工作目标。2 WEC_LDFLAGS=-I$(LIB) -I$(LIB1) 这是一句字符串展开替换,都是字符串)这里定义的LIBS变量的具体用处下面再说:语法.c communication: rm -f *.c database,clean是这个makefile的第二个工作目标,或者下载的第三方库;$(SRCS)展开了源文件tom_ACDC.c touch.,直接给你写这么长一串东西.c font.1) -L/usr/local/arm_linux_4,不然编译器将只在标准库的目录找; -static 和这句的道理是一样的,-Ldir指定连接时搜索库的路径.c gprs:arm-linux-gcc -O2 -I$(INC) -I$(INC1) &nbsp.c filesystem.,然后赋值给WEC_LDFLAGS.tom_ACDC_02然后 $(LIBS) 展开需要连接的单个库, LIB1)。然后&nbsp.gdb//为什么要清除这些呢.c然后&nbsp,这句是你这个makefile.c rtc,&nbsp.c database,它干了些啥呢首先 $(CC) 展开了这个变量CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1) & -static 其实就是调用gcc的命令行字符串1 &-l%s -l%s&quot,和维护;//$(LIBS)这个干嘛的.c uart_-L/usr/local/arm_linux_4; &nbsp。3&LIBS= -lpthread -lc -lgcc -liconv -lfreetype -lpng -lz -lm -ljpeg -lgif 这句是什么意思:是make默认的工作目标.,(其实makefile里面定义这些变量,你可以研习附件里面的GNUmake的教程..c -o&nbsp;比如你自己的库.2/arm-linux/lib&nbsp。4&nbsp?这句才是makefile的核心 这种target.c control.c uart_control?这句其实是工作目标all的第二行命令展开后其实很简单就是arm-linux-strip&nbsp.$(TARGET)展开了编译目标&nbsp,都是展开替换。5$(STRIP) $(TARGET)
//这句什么意思。这里, LIB,工作目标的第一个命令行字符串就构造完毕了这行$(CC) $(WEC_LDFLAGS) $(SRCS) -o $(TARGET) $(LIBS)就等价于运行一个shell命令
CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1)
-static1. 编译器干了啥呢?2. 若指定编译器的话,为什么不直接CC=arm-linux-gcc就OK 了? 3. 不加-static的话,好像编译不了,我试过了,是默认的共享库没有吗?
makefile写法灵活,原作者估计懒得分太多段,直接写了一个CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1)
-static而你不加static编译不过,我猜是因为有的你需要的库静态版本和共享版本不一样,共享版本比静态版本少了些东西造成的。
提问者评价
其他类似问题
local/&#47,而且也不易于维护 $(STRIP) $(TARGET)
&#47?makefile的变量定义 在这个赋值之后 WEC_LDFLAGS的值为-l&#47.flat rm -f *.2&#47.gdb/&#47? 源文件都没有的;arm-linux/local&#47.1 -l&#47: rm -f *;usr&#47.so引入-L是指定库的路径.map rm -f temp rm -f *?两个路径之间不是用“? -l和-L和-I有什么区别CC=arm-linux-gcc -O2 -I$(INC) -I$(INC1)
-static /usr&#47。不影响可执行程序功能 但是可以大幅度减少该文件的大小clean.o
rm -f *;/$(LIBS)这个干嘛的;arm-linux/gcc/arm_linux_4;这句什么意思.x
rm -f *? -static是什么意思;lib&#47?-static是gcc的一个编译选项 在编译过程中对动态链接不进行链接 其官方解释为Do not link against shared librariesWEC_LDFLAGS=-I$(LIB) -I$(LIB1)//&#47,也就是说会在-L的文件夹中去寻找库文件$(CC) $(WEC_LDFLAGS) $(SRCS) -o $(TARGET) $(LIBS)
/4;怎么可以等两个路径的?怎么等这么多的;这句什么意思:”分开的吗;arm_linux_4.2&#47.2?调用arm-linux-strip 把target中的所有调试信息去掉;这句什么意思.img rm -f $(TARGET)
rm -f *?-l是引入动态链接库 -lxxx定义后 编译的时候会把对应的lib这个是要用在编译中的 也就是arm-linux-gcc的编译选项之一 不需要加冒号分隔 而是要求空格分隔 LIBS= -lpthread -lc -lgcc -liconv -lfreetype -lpng -lz -lm -ljpeg -lgif/为什么要清除这些呢;&#47?这个就是引入动态链接库啦 就像上面说的一样其实上面的所有都是i定义变量 这句才是真正其效果的换句话说 把上面所有变量替换到这里 把makefile只写几行 效果一样 不过看要看吐血了
谢谢你的专业回答,但他说的是比较好,不好意思啦
来自团队:
为您推荐:
makefile的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
追逐梦想,光辉岁月
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(423)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094',
blogTitle:'U-BOOT中MAKEFILE详解',
blogAbstract:'\r\n&\r\nU-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。\r\nU-BOOT的下载地址: http://sourceforge.net/projects/u-boot\r\n我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败。1.1.6是没问题的。\r\nu-boot源码结构\r\n&&& 解压就可以得到全部u-boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分为3类。\r\n&&& 第1类目录与处理器体系结构或者开发板硬件直接相关;\r\n',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'追逐梦想,光辉岁月',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}makefile的选项CFLAGS,CPPFLAGS,LDFLAGS和LIBS的区别_百度知道
makefile的选项CFLAGS,CPPFLAGS,LDFLAGS和LIBS的区别
提问者采纳
LIBS告诉链接器要链接哪些库文件;xxx/xxx&#47LDFLAGS是选项。不过使用时链接阶段这两个参数都会加上:LDFLAGS = -L/mysql/mysql/var/lib -L/var&#47,但是运行时链接器却找不到这个库; ;-Wl;opt&#47,如果要让软件运行时库文件的路径也得到扩展:-Wl;xxx/opt&#47。都是喂给ld的,只不过一个是告诉ld怎么吃,编译出来的可执行程序的库文件搜索路径就得到扩展了;include -I/LDFLAGS = -L&#47,进一步说说LDFLAGS指定-L虽然能让链接器找到库进行链接;opt&#47,R/libjpeg/configure以前设置环境变量export LDFLAGS=&xxx/local&#47,一个是告诉ld要吃什么;libLIBS = -lmysqlclient -liconv这就明白了,R&#47。LDFLAGS告诉链接器从哪里寻找库文件。网上不难搜索到上面这段话;lib -R&#47,R/usr&#47,也没有问题,R在GraphicsMagick环境下;lib如 果在执行;xxx/include&#39;libCFLAGS 或 CPPFLAGS的用法CPPFLAGS=&#39;mysql/opt&#47。说到这里,Makefile将会设置这个选项;mysql&#47,那么我们需要增加这两个库给&lib -Wl。不过“告诉ld怎么吃”是什么意思呢?看看如下选项;var/lib -L/xxx/-I&#47, 也就是LDFLAGS = -L/lib -Wl.&#47,而且要加上引号哦(shell的用法),用为-R,R/lib -L&#47。PS;mysql/xxx/var/opt&#47, 链接时会有这个参数,所以你即使将这两个的值互换。那么执行configure以后;lib&quot,注意设置环境变量等号两边不可以有空格,R&var/local/var/-L/lib -Wl;lib -Wl;libpng/var/usr&#47,LIBS是要链接的库
来自团队:
相关专业回答
先说一下几个意思,,CFLAGS是c需要标识,编译c语言时候用cppflags编译c++时候用,ldflags链接用
libs链接静态库用,,我是按字面意思理解的,这几个变量不是makefile固有的,是用户自己定义的,,你把他定义成啥他就是干啥的,,我上面说的各变量含义是通常情况下用户会把这几个变量定义成那样
其他类似问题
为您推荐:
makefile的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Linux(10)
CFLAGS 表示用于 C 编译器的选项,
CXXFLAGS 表示用于 C&#43;&#43; 编译器的选项。
这两个变量实际上涵盖了编译和汇编两个步骤。
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是告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的&#20540;互换,也没有问题。
有时候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& ,注意设置环境变量等号两边不可以有空&#26684;,而且要加上引号(shell的用法)。那么执行configure以后,Makefile将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8295次
排名:千里之外
原创:21篇
(2)(5)(3)(1)(3)(2)(1)(1)(1)(3)(1)(1)(1)(1)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 makefile 编译选项 的文章

 

随机推荐