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

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表示path / src / include。这是因为我包含了FANN / src /“doublefann.c”,并且它具有#include“config.h”(位于FANN / src / include内的config.h)。我一团糟!

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

最佳答案

我认为包含doublefann.c并不是一个好主意。

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

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

关于c++ - 如何组织目录结构并为外部代码编写Makefile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11376846/

10-11 22:41