c - GNU gcc 编译器无法处理部分包含语句

标签 c gcc makefile gnu-make

假设我在以下文件夹中有一个 C 项目:

C:\microcontroller\stm32\myProject

我的项目中有两个重要的文件夹:
- source => 这是我所有的.c.h 文件
- build => gcc 将在这里写入所有目标文件

注意:如您所见,反斜杠表示这是在 Windows 电脑上发生的。

下图给出了一个概览:

enter image description here

我不会在这里显示我的完整 makefile,因为那样会让我们走得太远。所有 .c => .o 文件的 makefile 中的规则都是相似的。让我们只关注一个特定文件的编译:fileA2.c:

--------------------- COMPILATION OF FILE fileA2.c -------------------

Building ./build/folderA/fileA2.o

arm-none-eabi-gcc C:\\microcontroller\\stm32\\myProject\\source\\folderA\\fileA2.c
               -o C:\\microcontroller\\stm32\\myProject\\build\\folderA\\fileA2.o
               -c
               -MMD
               -mcpu=cortex-m7
               -...
               -IC:/microcontroller/stm32/myProject/source/folderA
               -IC:/microcontroller/stm32/myProject/source/folderB

请注意,gcc 调用以两个包含标志结束:一个用于文件夹 A,一个用于文件夹 B。如果 fileA2.c 有一个导入语句。

现在让我们考虑fileA2.c 中的源代码。我们假设此文件需要包含 fileA2.h 以及 fileB1.h

/*******************************/
/* SOURCE CODE fileA2.c        */
/*******************************/

// Some include statements
#include "fileA2.h"
#include "fileB1.h"

// Code
...

这些包含语句工作得很好。 gcc 编译器在给定的文件夹中检索文件 fileA2.hfileB1.h。但我注意到以下内容不起作用:

/*******************************/
/* SOURCE CODE fileA2.c        */
/*******************************/

// Some include statements
#include "fileA2.h"
#include "folderB/fileB1.h"

// Code
...

最后的 include 语句是文件的“部分路径”。编译时出现错误:
fatal error :folderB/fileB1.h:没有那个文件或目录

我怎样才能让 gcc 处理这个问题?

PS:使用“部分路径”不是我自己的习惯。但它们在我芯片的硅供应商的库中出现了很多,所以我不得不忍受它。

最佳答案

您指定了两个路径来查找除源文件的当前目录以外的包含:

           -IC:/microcontroller/stm32/myProject/source/folderA
           -IC:/microcontroller/stm32/myProject/source/folderB

你得到错误是因为两者都不是
C:/microcontroller/stm32/myProject/source/folderA/folderB/fileB1.h 也不
C:/microcontroller/stm32/myProject/source/folderB/folderB/fileB1.h 存在。

要解决该错误,您可以添加以下路径:

           -IC:/microcontroller/stm32/myProject/source

关于c - GNU gcc 编译器无法处理部分包含语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246574/

相关文章:

c - Xcode调试C语言出现错误: EXC_BAD_ACCESS (code=1)

makefile - 如何有条件地为Makefile(BSD + GNU)中的变量赋值?

makefile - 为 pdftohtml 制作链接器会导致编译器错误

c++ - 错误 : ambiguous default type conversion (c++)

c++ - 全局构造函数调用不在 .init_array 部分

c - 在 c makefile 中包含 sqlite3 lib

c - 编写低级代码时是否有正确的方法来衡量性能?

c++ - createprocess 没有那个文件或目录

c++ - View Controller 中的 C 函数问题

c++ - 如何将函数参数标记为输出