C++ GNU make:生成源文件列表

C++ GNU make:生成源文件列表,c++,makefile,gnu-make,C++,Makefile,Gnu Make,自动生成源文件列表(.c、.cpp等,而不是头文件)正常吗 你会怎么做?我正在考虑使用find和sed 编辑:项目是一个库。所有源文件都在项目目录中。没有不相关的源文件。所有对象文件都是使用相同的编译器选项生成的。我想按照Tromey的方法生成所有源文件的列表,然后为每个源文件生成一个依赖项文件。这是一个可行的方法吗 更多编辑:它是一个相当大的C++库。该项目正在开发中。尽量减少重新编译是非常理想的 谢谢。使用GNU make,您可以使用通配符。请参阅以获取示例。正常?这是普通的,但不是明智的

自动生成源文件列表(.c、.cpp等,而不是头文件)正常吗

你会怎么做?我正在考虑使用find和sed

编辑:项目是一个库。所有源文件都在项目目录中。没有不相关的源文件。所有对象文件都是使用相同的编译器选项生成的。我想按照Tromey的方法生成所有源文件的列表,然后为每个源文件生成一个依赖项文件。这是一个可行的方法吗

更多编辑:它是一个相当大的C++库。该项目正在开发中。尽量减少重新编译是非常理想的


谢谢。

使用GNU make,您可以使用通配符。请参阅以获取示例。

正常?这是普通的,但不是明智的

许多人使用Make通配符或
find
或类似的方法来生成存在于某个目录树中的所有源文件的列表,然后将它们提供给编译器并将对象链接在一起。这是一个脆弱的解决方案,会给你带来麻烦。如果源文件之间出现冲突(例如,
void foo()
的两个单独定义),链接器会投诉,并且可能不清楚如何解决该问题。您可能会发现自己有一大堆源文件,其中许多对项目来说是不必要的,这会减慢构建速度并导致冲突。如果您想在另一个可执行文件中使用这些源代码中的一些(但不是全部),则必须求助于符号链接或其他一些乱七八糟的方法

更好的方法是在makefile中指定给定目标需要哪些对象,然后让Make确定要使用哪些源。这就是Make擅长的。没有可靠的方法来自动维护对象列表,您只需手工操作,但工作量并不大;如果你经常改变它们,以至于这真的是件麻烦事,那么你就做错了

编辑:

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

从什么生成它们?.o文件列表?我编辑了我的问题。这是一个图书馆。只有属于项目的文件是不稳定的,在项目开发过程中,其他一切都不会改变。我认为,在这一点上,如果您发现自己需要几个“组”的源,那么将它们分组到单独的文件夹中也是可取的,这样维护人员就可以掌握在哪里使用什么@Matthieu M:我同意,但我要补充的是,每个目录都应该包含一组自给自足的源代码,一组可以在不依赖其他目录的情况下进行编译和测试的源代码(或者最多需要一些外部源代码的简单存根)。如果源不能被隔离,那么我认为这是界面设计问题的一个症状。需要尽量减少重新编译。然后使用通常的make depend机制。。。有很多例子。