2012-07-07 26 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