2017-04-25 92 views
-1

假設我們在目錄project1project2中有兩個C項目,每個項目都有自己的include目錄。 project1/src的來源是否有可能包含project2這樣的標題文件:#include <project2/def.h>def.hproject2/include/def.hC:前綴#include

謝謝。

編輯:要清楚,讓我們說你有這兩個projets:

project1/ 
    - Makefile 
    - include/def.h 
    - main.c 

project2/ 
    - Makefile 
    - include/def.h 
    - main.c 

的問題是,你可以在PROJECT1指項目2的頭與這樣的包括(在project1/main.c例如):

#include <project2/def.h> 

答案是否定的。

+0

文件不屬於它們所屬的項目,所以是。將它看作一個聚合關係 – CinCout

+0

在Include語句中使用絕對文件路徑或者甚至構建良好的相對文件路徑,並且還考慮使用「」如果你構建了這個棘手的相對文件路徑的文件名的分隔符 – nicomp

+0

你可能也想看看MSVC中gcc/clang和'/ I'中的'-I'標誌 –

回答

1

從技術上講,不,你不能,因爲是

如果你真的想:

#include <project2/def.h> 

,但有project2/include/def.h,你有兩種方式來處理:

,如果你有-Iproject2/include編譯,然後創建一個子目錄,把你的頭有:

project2/include/project2/def.h 

您將從project1中包含爲#include <project2/def.h>

或者,您可以創建頭project2/def.h將包含#include project2/include/def.h,你會打電話給-I.其中.高於project2來源的目錄。

更好的解決方案,我認爲是第一個,因爲它不依賴於知道如何命名您的project2源目錄(它可以命名爲foobar本地,您仍然可以-I/path/to/foobar/include/和#include。

+0

這就是我認爲的,太糟糕了,我們不能命名空間包括目錄。 – friedrich

+0

無論頭文件位於何處,你能不能在include語句中拼湊文件路徑? – nicomp

+0

@nicomp我認爲你最終可能擁有絕對路徑(我認爲是「邪惡」)或跨項目文件夾結構的相對路徑(我認爲沒有什麼更好的)。 – Yunnosch