makefile中-L 和 -I 编译开关
LIB = -L/usr/X11/lib
INCLUDE= -I/usr/X11/include/X11
LIBS = -lX11 -lc -lm
这个 -L 和 -I 开关告诉编译器和链接分别在哪里找到 library 和
include 文件。在这个例子里, X11 库应该在 /usr/X11/lib 目录,且
X11 包含文件应该在 /usr/X11/include/X11 目录里。
书上是这样解释的:
-I DIR 当包含其他 makefile 文件时,可利用该选项指定搜索目录
读了好多遍都没有懂,结果使我浮想联翩,最后在老师我指导下明白了:
指定目录下(如tmp)的makefile(或者其他名字)在当前Makefile中要有
这样一句:include makefile,然后makefile -I tmp时就会在在tmp下找
Makefile并把里边的内容添加到当前目录下的Makefile中。
当前目录下的Makefile:
OBJ=main.o fun1.o fun2.o
CC=gcc
CFLAGS=-DDBG
hello: $(OBJ)
gcc $^ -o hello
include Makefile
tmp目录下的Makefile:
clean:
rm *.o hello
install:
cp hello /usr/bin
uninstall:
rm /usr/bin/hello
在当前目录下执行:
[root@localhost makefile]# make clean
makefile:8: Makefile: 没有那个文件或目录
make: *** 没有规则可以创建目标“Makefile”。 停止。
但是加上这个-I tmp后:
[root@localhost makefile]# make clean -I tmp
rm *.o hello
rm: 无法删除"*.o": 没有那个文件或目录
rm: 无法删除"hello": 没有那个文件或目录
make: *** [clean] 错误 1
[root@localhost makefile]#
就可以了,是因为它把这个/tmp/Makefile中的内容拷贝到当前目录下的
Makefile中了。
相关文章
- 如何修复在Dev C和Netbeans中工作的makefile,而不是在Eclipse中?
- Scatter/Gather I/O在L3中的应用
- 基于SqlSugar的开发框架循序渐进介绍(24)-- 使用Serialize.Linq对Lambda表达式进行序列化和反序列化 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换 基于SqlSugar的开发框架循序渐进介
- Makefile的 -I , -L, -l的比例
- gcc的-l和-i详解 GTK+3.0入门
- gcc -l选项必须放在文件名后面吗?关于apue中libapue的问题
- gcc参数中的-I, -L和-l
- vue-learning:41 - Vuex - 第二篇:const store = new Vue.Store(option)中option选项、store实例对象的属性和方法
- Shell和MakeFile中变量的总结说明
- Python网络编程中的select 和 poll I/O复用的简单使用