我正在开始一个包含一些外部代码的大项目。现在,我有一个像这样的目录结构:
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/