2012-08-28 118 views
1

我有一個項目有兩個源文件夾(main和lib)。它產生一個共享庫和一個可執行文件。這是目前建成像這樣:C++跨文件夾包含失敗

  • 副本都來自這兩個文件夾的文件到一個新的臨時文件夾
  • 運行lib_makefile
  • 運行main_makefile
  • 複製二進制文件進行
  • 刪除臨時文件夾

這讓我感到奇怪的做事方式,所以我嘗試在lib_makefile(和vi中添加-I../main來構建每個對象CE-反之亦然)。不幸的是,這似乎並不奏效。

說明性示例: foo.cpp(在lib中)包括bar.h(在main中),其中包括baz.h(在lib中)。

當我嘗試編譯共享庫時,它正確地在main /中查找bar.h,但隨後用「沒有這樣的文件或目錄」聲稱它找不到baz.h,即使baz.h在與lib_makefile相同的目錄!

所有包含格式爲#include「xxx.h」(即include語句中沒有相對路徑)。

有沒有辦法讓這個工作?我覺得我必須失去了一些東西明顯..

(注:我不能修改的#includes因爲其他人還建立這個複製的一切,跨路)

+0

您是否嘗試過也加入像'-I ../ lib'到庫makefile的東西呢? –

+1

它包含'this directory',但是在處理'../main'中的文件'this directory'時,並不是你運行的文件從 –

回答

5

您應該添加類似-I../lib (或任何你的庫路徑)以及庫的makefile。

這樣做的原因是,預處理器查找相對包括-文件的目錄當前文件中,而不是從哪裏原來文件在不在。

+1

或者只是'-I.',因爲這與'-I'相同../ lib'在'lib'目錄中 –