对 linux C 编程 makefile书写的疑问(三)

feilongzafei 2011-02-13 08:14:44
下面是一个makefile:

CC=gcc
CFLAGS= -Iinclude -Wall -g -DDEBUG
LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib

myapp: main.o test1.o test2.o test3.o test4.o test5.o
$(CC) -o $@ $(LDFLAGS) $^ -ldl

clean:
rm -rf *.o myapp


几点疑问:
1.LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib
求高手帮解释一下 -Wl干什么用的?

2.$(CC) -o $@ $(LDFLAGS) $^ -ldl

$(LDFLAGS)是库文件的位置,-ldl是具体的库的名字, 对(LDFLAGS) 和 -ldl之间存在$^有些不解,不是不知$^是什么,知道$^是依赖目标,而是对$(LDFLAGS) $^ -ldl的排列顺序有些疑问,求解释一下makefile命令的具体命令规则顺序是怎样写的,举个例子:就是$(CC) -o $@ $(LDFLAGS) $^ -ldl
是按什么要求进行排列的?
求具体的排列顺序的方法。

初学linux,处处不懂。
以上两点希望有经验的人士帮解决一下!



...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
feilongzafei 2011-02-14
  • 打赏
  • 举报
回复
谢谢各位!
帅得不敢出门 2011-02-14
  • 打赏
  • 举报
回复
man gcc
justkk 2011-02-14
  • 打赏
  • 举报
回复
通常是这样
gcc 1.c -o yourexe -L/LIB -ltest
或者gcc -o yourexe 1.c -L/LIB -ltest
李迟 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feilongzafei 的回复:]
引用 1 楼 subfate 的回复:
有些书上说链接标志(LDFLAGS)要放到最后比较好。
最具体的只有去看官方的manual了。

请问官方的manual去哪里查看?
[/Quote]
google->gcc
feilongzafei 2011-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 subfate 的回复:]
有些书上说链接标志(LDFLAGS)要放到最后比较好。
最具体的只有去看官方的manual了。
[/Quote]
请问官方的manual去哪里查看?
李迟 2011-02-13
  • 打赏
  • 举报
回复
有些书上说链接标志(LDFLAGS)要放到最后比较好。
最具体的只有去看官方的manual了。
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者库文件。make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU make 在 makefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向头文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用头文件的源文件,但是如果您知道对头文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!
跟我一起写 Makefile (PDF 重制版) 作者: 陈皓 2020 年 05 月 24 日 目录 1 概述 1 1.1 关于程序的编译和链接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 makefile 介绍 3 2.1 makefile 的规则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 一个示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 make 是如何工作的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4 makefile 中使用变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 让 make 自动推导 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.6 另类风格的 makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.7 清空目标文件的规则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.8 Makefile 里有什么? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.9 Makefile 的文件名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.10 引用其它的 Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11 环境变量 MAKEFILES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.12 make 的工作方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 书写规则 13 3.1 规则举例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 规则的语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3 在规则中使用通配符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 文件搜寻 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.5 伪目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.6 多目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.7 静态模式 . . . . . . . . . . . . . .

23,129

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧