我正在开始一个包含一些外部代码的大项目。到现在为止,我有一个像这样的目录结构:
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中做错了吗? 任何其他建议,将不胜感激。
答案 0 :(得分:1)
我不认为包括doublefann.c是个好主意。
要应对这种情况,您可以将所有外部代码编译到共享(或静态)库中,然后将标头包含在MyLibrary(或test)目录中的文件中。编译后,您可以“链接”到库。
如果您可以选择从Makefile切换,那么CMake将是更好的选择。根据我的经验,使用CMake组织项目比使用Makefile更容易。