GNU make:生成源文件列表

时间:2011-04-17 18:59:41

标签: c++ makefile gnu-make

自动生成源文件列表(.c,.cpp等,而不是标题)是否正常?

你会怎么做?我想用find和sed。

编辑:该项目是一个图书馆。所有源文件都在项目目录中。没有不相关的源文件。所有目标文件都使用相同的编译器选项生成。我正在考虑按照Tromey的方式生成所有源文件的列表,然后生成每个源文件的依赖文件。这是一种可行的方法吗?

更多编辑:这是一个相当大的C ++库。该项目正在制定中。最大限度地减少重新编译是非常需要的。

感谢。

2 个答案:

答案 0 :(得分:2)

使用GNU make可以使用通配符。有关示例,请参阅this question

答案 1 :(得分:2)

正常?这很常见,但并不明智。

许多人使用Make通配符或find或类似的东西来生成某个目录树中存在的所有源文件的列表,然后将它们提供给编译器并将对象链接在一起。这是一个脆弱的解决方案,会让你陷入困境。如果源文件中出现冲突(例如,void foo()的两个单独定义),则链接器会抱怨,如何解决问题可能并不明显。您可能会发现自己有一个源文件林,其中许多对您的项目来说是不必要的,从而减慢了构建速度并导致冲突。如果你想在另一个可执行文件中使用其中一些来源(但不是全部),你将不得不求助于符号链接或其他一些kludgery。

更好的方法是在makefile中指定哪些对象对于给定目标是必需的,然后让Make确定要使用哪些源。这就是Make擅长的。没有可靠的方法来自动维护对象列表,你只需要手工完成它,但它不是那么多工作;如果你经常改变它们,这是一个真正的苦差事,那么你做错了。

修改:
如果项目是你描述的库,那么是的,这是一个可行的方法,而且是一个非常好的方法。而Tromey的方法可以很好地防止不必要的重新编译。

相关问题