如何组织目录结构并为外部代码编写Makefile

时间:2012-07-07 16:43:15

标签: c++ makefile

我正在开始一个包含一些外部代码的大项目。到现在为止,我有一个像这样的目录结构:

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

我将include子目录用于外部代码,MyLibrary用于我自己的头文件,test用于cpp测试代码。

我有FANN,Eigen和其他图书馆。我直接使用他们的代码,我没有经验包括文件,使用不同的目录,以及类似的东西。

在Makefile中我有这样的行:

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

这是我解决它编译的方法,但不知道使用各种-I选项是不是很好。例如,看看我使用FANN作为FANN / src的路径,使用FANNINCLUDE作为路径/ src / include;这是因为我包括FANN / src /“doublefann.c”,它有一个#include“config.h”(在FANN / src / include中是config.h)。我很乱!

你会推荐一种更好的组织文件的方法,还是很好? 我在Makefile中做错了吗? 任何其他建议,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不认为包括doublefann.c是个好主意。

要应对这种情况,您可以将所有外部代码编译到共享(或静态)库中,然后将标头包含在MyLibrary(或test)目录中的文件中。编译后,您可以“链接”到库。

如果您可以选择从Makefile切换,那么CMake将是更好的选择。根据我的经验,使用CMake组织项目比使用Makefile更容易。