LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1407|回复: 12

小弟刚刚学用automake编译一个工程,觉得有两个不如VC的地方!

[复制链接]
发表于 2006-7-13 18:43:55 | 显示全部楼层 |阅读模式
列举如下:
1. 自己得在Makefile.am中写  xx_SOURCES = .....
这个好象很麻烦,因为很多时候,显然所有的文件都应该编译和链接。那俺又何必都写出来呢,如果有100个cpp文件,那就惨了 !!

2. 嵌套的Makefile:
有许多大的GNU工程,好象是嵌套多层Makefile。这个写起来很郁闷的。而VC就不用写这么多(一个都不用写)

可能是小弟还没学精,反正目前觉得这两点不太爽 :confused: :comp
发表于 2006-7-13 19:23:33 | 显示全部楼层
你还是多学学吧...

1. 这个有更快, 更灵活的方法

2. 这个样做有这样做的理由和好处
回复 支持 反对

使用道具 举报

发表于 2006-7-13 20:20:56 | 显示全部楼层
楼主说的问题的很客观,不可能在makefile.am里手动写上所有的源文件名,如果文件名多的话,手动输入就太傻了。
可以自己写个程序把源文件名加入到.am文件中去,懂点shell编程的话,应该不难的。
另外,也可以使用IDE,例如anjuta,kdevelop等,也不需要自己写这些文件。

至于层次makefile,楼上说的很对,这个样做有这样做的理由和好处,但是如果没给出解释的话,这是句废话,至于有什么好处,楼下的接~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 21:41:59 | 显示全部楼层
1. 俺也只想到用shell来做,不知道automake本身支持不
2. 俺觉得这种嵌套的东西,可能就是为了层次感强点,为了某一个子文件夹可以单独编译成库,.... 但不管为了什么,俺还是觉得让用户写多层次的Makefile很傻。

在大多数情况下,用户只需要指定到文件夹就好了,而不需要指定到文件。
假设src下有main.c 以及 lib1 和 lib2 两个文件夹,如果能这样写就好了:
xx_SOURCES = main.c  lib1  lib2
或者xx_SOURCES = main.c  lib*
甚至xx_SOURCES = ./*
~~~~~~~~~~~~~~~~~~~~~~
小弟很懒,。。。
回复 支持 反对

使用道具 举报

发表于 2006-7-13 21:50:27 | 显示全部楼层
那用ide吧,ide的话只要把源文件扔到工程就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 22:04:20 | 显示全部楼层
呵呵,但是小弟还是习惯了命令行了:)
刚才查makefile,不小心查到了一个KDE上的automake/make的替代品,叫做“unsermake”,想不到支持我想的那个功能:
Unsermake creates one large Makefile rather than one per directory. Makefiles are also made per directory so you can build just a part of a module if you want to (they call the master Makefile)
但可能其他方面功能就逊色了,可能还在发展
回复 支持 反对

使用道具 举报

发表于 2006-7-14 01:52:50 | 显示全部楼层
但是,当你拷贝别人的一个代码目录过来的时候就简单了。
回复 支持 反对

使用道具 举报

发表于 2006-7-14 05:53:02 | 显示全部楼层
try CMake,  Scons
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-14 10:41:05 | 显示全部楼层
谢谢各位,
刚花时间看了一下CMake,支持的feature也不少吗,而且支持生成VC2005工程!
但不知道是否支持读取VC2005工程文件来指导编译,如果这样就太爽了呵呵,
而且看网上说,KDE4转向CMake了, ~~~~
回复 支持 反对

使用道具 举报

发表于 2006-7-15 03:11:11 | 显示全部楼层
kde4用的就是cmake, CMakeList.txt看起来要舒服很多。
但是客户的机器上必须安装cmake, automake 只是要求sh就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表