2012-07-07 60 views
1

我開始一個包含一些外部代碼的大項目。到現在爲止,我有這樣的目錄結構:如何組織目錄結構並編寫外部代碼的Makefile

MyProject 
|-- include 
| |-- FANN 
| | |-- src 
| | | |-- include 
| |-- eigen 
|   |-- Eigen 
|-- MyLibrary 
|  +-- header1.H 
|  +-- header2.H 
|  +-- otherheaderN.H 
|-- test 
     +-- Makefile 
     +-- test1.cpp 
     +-- testN.cpp 

我使用CPP測試代碼include子目錄的外部代碼,MyLibrary我自己的頭文件,test

我有FANN,Eigen和其他庫。我直接使用他們的代碼,並且我沒有包含文件,使用不同的目錄以及類似的東西的經驗。

在Makefile中我有這樣的臺詞:

test1: 
    g++ -I $(FANN) -I $(FANNINCLUDE) -I $(EIGEN) -I $(MyLib) test1.cpp -o test1 

這是我如何解決了它來編譯,但不知道它是不是很好用各種-I選項。例如,看看我使用FANN作爲FANN/src的路徑,並使用FANNINCLUDE作爲path/src/include;這是因爲我包含了FANN/src /「doublefann.c」,它包含了一個#include「config.h」(在FANN/src/include中是config.h)。我是一團糟!

你會推薦一種更好的組織文件的方式,或者它是好的嗎? 我在Makefile中做錯了嗎? 任何其他建議,將不勝感激。

+0

你爲什麼包含一個.c文件? – 2012-07-07 16:51:03

+0

@AnonMail這是因爲庫:「只需將文件doublefann.c或floatfann.c包含在您的項目中,一切都應該工作」http://leenissen.dk/fann/wp/help/installing-fann/ – jeanc 2012-07-07 16:55:13

回答

1

我不認爲包括doublefann.c是一個好主意。

要應對這種情況,可以將所有外部代碼編譯到共享(或靜態)庫中,然後將這些頭文件包含到MyLibrary(或test)目錄中的文件中。編譯後,你可以'鏈接'到庫。

如果您有從Makefile切換的選項,那麼CMake會是更好的選擇。根據我的經驗,使用CMake來組織項目比使用Makefile更容易。

+0

I也認爲包含.c文件並不好,但我認爲這取決於庫。 FANN在FANN/src目錄中有一些.c文件,在FANN/src/include和.c文件(他們推薦包含在程序中)中包含.h文件,這些包含在#include「header.h」 '。不要如何管理它以其他方式工作:( – jeanc 2012-07-07 21:52:07