【问题标题】:How to organize directory structure and write Makefile for external code如何组织目录结构并为外部代码编写 Makefile
【发布时间】:2012-07-07 16:43:14
【问题描述】:

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

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

【问题讨论】:

标签: c++ makefile


【解决方案1】:

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

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

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

【讨论】:

  • 我也认为包含 .c 文件不好,但我认为这取决于库。 FANN 在 FANN/src 目录中有一些 .c 文件,在 FANN/src/include 中有一些 .h 文件,在 .c 文件(他们建议将其包含在程序中)中,包含是使用 #include"header.h" 进行的。不要我怎么能管理它以其他方式工作:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多