假设我在以下文件夹中有一个 C 项目:
C:\microcontroller\stm32\myProject
我的项目中有两个重要的文件夹:
- source
=> 这是我所有的.c
和.h
文件
- build
=> gcc 将在这里写入所有目标文件
注意:如您所见,反斜杠表示这是在 Windows 电脑上发生的。
下图给出了一个概览:
我不会在这里显示我的完整 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.h
和 fileB1.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/