自动生成源文件列表(.c、.cpp等,不包括头文件),这正常吗?
你会怎么做呢?我想使用find和sed。
编辑:这个项目是一个库。所有的源文件都在项目目录中。没有无关的源文件。所有的目标文件都使用相同的编译器选项生成。我打算按照Tromey的方式生成所有源文件的列表和每个源文件的依赖关系文件。这是可行的方法吗?
更多编辑:这是一个相当大的C++库。该项目正在开发中。最小化重新编译是非常希望的。
谢谢。
使用GNU make可以使用通配符。请参见这个问题以获取示例。
正常吗?这很普遍,但不明智。
许多人使用Make通配符或find
或类似工具来生成某个目录树中存在的所有源文件列表,然后将它们提供给编译器并链接对象。这是一种脆弱的解决方案,会让你陷入麻烦。如果源文件之间出现冲突(例如,void foo()
的两个不同定义),链接器会抱怨,并且修复问题可能不明显。你可能会发现自己有一大堆源文件,其中许多对你的项目来说都是不必要的,这会减慢你的构建速度并引起冲突。如果你想在另一个可执行文件中使用其中一些源文件(而不是全部),你就必须使用符号链接或其他一些技巧。
更好的方法是在makefile中指定哪些对象对于给定目标是必需的,然后让Make找出要使用哪些源文件。这正是Make擅长的。没有可靠的自动维护对象列表的方法,你只能手动完成,但这并不需要太多的工作;如果你经常更改它们以至于这成为真正的麻烦,那么你做错了什么。
编辑:
如果项目是一个库,正如你所描述的那样,那么是的,这是一种可行的方法,而且还是一种相当不错的方法。Tromey的方法将非常好地防止不必要的重新编译。