免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: whyglinux
打印 上一主题 下一主题

C/C++ 通用 Makefile [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-03-15 15:08 |只看该作者
请教whyglinux一个问题,生成的目标文件默认和源代码文件在一个目录里,我想自己设置目标文件的目录,在你的模版中加入了以下代码,但是不行:

OBJDIRS   := obj
#以下修改了OBJS的写法
OBJS1    = $(foreach x,$(SRCEXTS), \
        $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))
OBJS    = $(foreach x,$(SRCDIRS), \
        $(patsubst %$(x), $(OBJDIRS),$(filter %$(x),$(OBJS1))))

第一个OBJS1是把*.$(SRCEXTS)替换成*.o文件,可以成功,这个是你的模版中原有的了,第二个想把SRCDIRS替换成OBJDIRS但是不行,不知道为什么?

另外,你的这个文件要求生成的PRAGRAMM和目标文件在一个目录下,不知道怎么改变这个设置?

[ 本帖最后由 converse 于 2007-3-15 15:10 编辑 ]

论坛徽章:
0
32 [报告]
发表于 2007-03-15 16:15 |只看该作者
我得Makefile里面有解决这个问题

论坛徽章:
0
33 [报告]
发表于 2007-03-15 16:16 |只看该作者
请注意一下下面这两行


  1. $(OBJ_DIR)%.o:$(SRC_DIR)%.c $(OBJ_DIR)%.d
  2.         $(CC) $(FLAG_COMPLE) $< -o $@

复制代码

论坛徽章:
0
34 [报告]
发表于 2007-03-15 16:16 |只看该作者
这里是带路经的,所以能够正确匹配

否则不能成功

(我测试的时候发现必须这样)

论坛徽章:
0
35 [报告]
发表于 2007-03-20 22:00 |只看该作者
原帖由 converse 于 2007-3-15 15:08 发表
请教whyglinux一个问题,生成的目标文件默认和源代码文件在一个目录里,我想自己设置目标文件的目录,在你的模版中加入了以下代码,但是不行:

OBJDIRS   := obj
#以下修改了OBJS的写法
OBJS1    = $(foreach x,$ ...


假设上面的变量 x 表示 abc 目录,则 %$(x) 就是 %abc,表示的特征是以 abc 结尾的字符串。有这样特征的目标文件存在吗?

其实有更简单的实现方法:OBJS = $(addprefix $(SRCDIRS), $(notdir $(OBJS1)))

要给生成的可执行文件加路径,在 PROGRAM 中直接设定即可;或者在连接目标文件的时候将 $(PROGRAM) 改为 $(XX_PATH)$(PROGRAM)。

论坛徽章:
0
36 [报告]
发表于 2007-03-20 23:36 |只看该作者
原帖由 whyglinux 于 2007-3-20 22:00 发表


假设上面的变量 x 表示 abc 目录,则 %$(x) 就是 %abc,表示的特征是以 abc 结尾的字符串。有这样特征的目标文件存在吗?

其实有更简单的实现方法:OBJS = $(addprefix $(SRCDIRS), $(notdir $(OBJS1)))
...


谢谢,我明天回去试试看,准备大规模的把这套模板用在工作中

论坛徽章:
0
37 [报告]
发表于 2007-03-21 01:10 |只看该作者
原帖由 converse 于 2007-3-20 23:36 发表


谢谢,我明天回去试试看,准备大规模的把这套模板用在工作中:em18::em18:


如果你的软件需要发布,有可能工作在不同的 Unix/Linux 平台下,那么这个 Makefile 不适合,因为它缺乏基本的探测系统环境的能力,而且许多功能也需要添加,此 Makefile 的跨平台性也没有经过测试。所以,这时,Autotools(或者叫 GNU Build System)是更加合适的选择。

我写这个 Makefile 的目的是为了得到一个一劳永逸的软件构建环境。也就是说,在为某一类程序(比如使用 GTK+ 库的程序)配置好 Makefile 之后,即使程序的源文件被改名、或者增加减少之后也不需要改动这个 Makefile,仍然可以用它来构建程序;而且,也可以用这个 Makefile 构建其它类似的程序(比如使用 GTK+ 库的程序。)。如果没有什么特殊的要求,通常你需要做的只是把它拷贝到程序的目录下、或者仅仅需要做一个符号连接。

无论在工作还是在学习中,我们都要经常自己编写或者实验他人的代码。这时,这个 Makefile 的优越性就可以体现出来了。Autotools 工具虽然功能强大,但是:一是你要学习它的使用,这对初学者有点困难;二是源程序文件变了,还需要相应地改动 Autotools 的配置文件,很难具备我上面提到的利便性。因此,除了正规的项目之外,一些实验性的代码我总是用我的这个 Makefile 来构建。

(借此机会回答了“已经有了 Autotools 工具了,还需要一个手工创建的 Makefile 吗?”类似的疑问,同时说明了这个通用 Makefile 的一般应用场景。希望有用。)

论坛徽章:
0
38 [报告]
发表于 2007-03-21 15:14 |只看该作者
别让这个沉了,不好找,

仍然学习中

论坛徽章:
0
39 [报告]
发表于 2007-03-21 15:23 |只看该作者
这个比automake怎么样?

论坛徽章:
0
40 [报告]
发表于 2007-03-23 02:06 |只看该作者
哈哈,太好了!正是我要找的!!!谢谢楼主,我要认真研究研究!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP