1

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

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

我将includesubdir 用于外部代码、MyLibrary我自己的头文件和testcpp 测试代码。

我有 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中做错了吗?任何其他建议,将不胜感激。

4

1 回答 1

1

I don't think including doublefann.c is a good idea.

To cope with this situation, you can compile all the external code into a shared (or static) library, and then include the headers into files in MyLibrary (or test) directory. After compilation, you can 'link' to the library.

If you have an option to switch from Makefile then CMake would be a better option. In my experience, using CMake to organize projects is easier than using Makefile.

于 2012-07-07T17:07:20.780 回答