想象一下,我在下面的文件夾中的C-項目:GNU gcc編譯器無法處理部分包括報表
C:\microcontroller\stm32\myProject
我有內部myProject的兩個重要的文件夾:
- source
=這裏>都是我的.c
和.h
文件
- build
=> GCC將寫的所有目標文件在這裏
注:如你所看到的,反斜線我ndicate這是發生在Windows PC上。
下圖給出了一個概述:
我不會顯示我在這裏完整的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
注意,海合會呼籲有兩個標誌包括結尾:一個用於folderA,一個用於FolderB中。如果fileA2.c
有一個導入語句,這使得gcc可以使用這些文件夾中的任何頭文件(fileA1.h
,fileA2.h
或fileB1.h
)。
現在讓我們考慮一下fileA2.c
的源代碼。我們假設這個文件需要包含fileA2.h
和fileB1.h
。
這些包括陳述完美。 gcc編譯器檢索給定文件夾中的文件fileA2.h
和fileB1.h
。但我注意到以下不起作用:
/*******************************/
/* SOURCE CODE fileA2.c */
/*******************************/
// Some include statements
#include "fileA2.h"
#include "folderB/fileB1.h"
// Code
...
最後一個包含語句是該文件的「部分路徑」。編譯時出現錯誤:
fatal error: folderB/fileB1.h: No such file or directory
如何獲得gcc來處理這個問題? PS:使用「局部路徑」並不是我自己的習慣。但是他們在我的芯片供應商的庫中出現很多,所以我必須忍受它。
爲'fileA2.c'是'folderA'並沒有'folderB'裏面'folderA',這不是找到包含文件的原因。試試'#include「../folderB/fileB1.h」,它會正常找到它。這意味着去到父目錄,然後到'folderB',最後在那裏包含'fileB1.h'文件。 –