使用 makefile 构建 .S 文件和 .s 文件的方式有区别吗?

Is there a difference in the way one should build .S files vs .s files using makefile?

我使用 CubeMX 生成了一个 ThreadX 项目,它为我提供了 .s 和 .S 文件。使用 make 构建时,我得到 .S 文件的 'No rule to make target',但 .s 文件没有(目标文件已成功创建)...这些类型的文件有什么区别,是否有将 .S 文件构建为目标文件必须采取的额外步骤?我了解到这个错误主要出现在编译器没有找到文件的情况下,但是我已经多次验证了路径。

不,在构建它们的方式上没有区别,gcc -c 两者都可以生成 .o

GCC 处理 pre-processing 它们与否的差异。

显然你的 Makefile 需要有一个规则来从 .s.S 构建 .o。在最简单的情况下,只需复制 %.o: %.S 的模式规则,因为在一般情况下定义 case-insensitive 模式规则或简单地列出 似乎非常不方便。