2015-03-02 80 views
2

我有一個名爲code/include/文件夾,這個文件夾下,我有一個叫include/文件夾,名爲code.cc源文件,包含頭文件a.hb.h,而這兩個頭文件還存在別的地方,以便使用在include/文件夾中的頭文件,我在Makefile添加一個標誌-Iinclude,但我的代碼仍然使用這些頭文件在其他地方,如果我有以下方式的頭文件,我的代碼使用include/下的頭文件,爲什麼-I標誌沒有更改include目錄?GCC -I不會改變包括目錄

#include "include/a.h" 
#include "include/b.h" 

編輯:目錄:

code/code.cc 
code/Makefile 
code/include/a.h 
code/include/b.h 

的Makefile:

CFLAGS = -Iinclude/ 
CFLAGS += -m32 
LDFLAGS = -Llib -llits -lrt -lpthread -Wl,-R,'lib' 
code:code.cc 
    gcc -o code $(CFLAGS) $(LDFLAGS) code.cc 

的gcc --version:

gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] 
Copyright (C) 2008 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+0

'Makefile'在哪裏?它在'code'下嗎?你是否在'code'下運行'make'?你的問題並不清楚。 – lurker 2015-03-02 14:09:45

+0

@lurker Makefile在'code'下。 – user4016367 2015-03-02 14:10:45

+0

'a.h'和'b.h'文件*也存在於哪裏? INCLUDE_PATH中是否還有該文件夾? – 2015-03-02 14:12:01

回答

1

在此設置:

code/code.cc 
code/Makefile 
code/include/a.h 
code/include/b.h 

若再加上-Iinclude/到編譯器標誌,你#include "include/a.h"會尋找include/a.hinclude/文件夾第一。即編譯器查找不存在的include/include/a.h,編譯器在搜索路徑的其他地方查找include/a.h文件。

您的代碼必須使用#include "a.h",否則您的-Iinclude/必須是-I. -I。將當前目錄搜索路徑,這樣#include "include/a.h"將匹配文件./include/a.h確保-I.之前任何其他的搜索路徑,這也將符合您的包含文件中的。

0

-I目錄的順序對gcc有重要意義。 -I指令將「在其他地方的這些頭文件」添加到-Iinclude之前/include

0

你必須使用

CFLAGS = -I<full_path_to_project>/code 

如果include放在這個目錄下,你有文件,相對於它在你的包含語句

#include "include/a.h" 
     // ^^^^^^^^^ 

如果指定

CFLAGS = -I<full_path_to_project>/code/include 

您不需要指定相對包含路徑

#include "a.h" 

使用-I指定的相對路徑將以make使用的工作目錄開始。如果沒有相對路徑部分,則省略-I選項或指定-I./

+0

我的Makefile在'code /'下,在這種情況下,我的CLFAG應該只是'-I'? – user4016367 2015-03-03 12:19:55

+0

@ user4016367 _「我的Makefile在代碼中/」_在這種情況下,您根本不需要'-I'選項。 – 2015-03-03 12:21:47

+0

@ user4016367你經常在SO上詢問非常基本的低質量問題。 StackOverflow並不是真正的學習編程語言或工具的地方,當你問這裏時,你應該已經熟悉了基本知識。所以先研究文檔手冊。您也可以從幫助部分再次閱讀[這些文章](http://stackoverflow.com/help/asking)。最好的祝福。 – 2015-03-03 12:33:24