最近正在开发第三方库,由于我自己的习惯,我采用了如下的结构来布置我的文件
第三方库文件结构
对于头文件 head.h
/**
* 头文件 + 一些版权信息
*/
#ifndef _HEAD_H_
#define _HEAD_H_
//防止重复包含宏
#include <需要用到的库>
using 需要用到的类或函数或命名空间;
namespace 自定义的命名空间
{
一些定义与声明;
}
#include "cpp.cpp" //包含代码实现
#endif
对于代码实现文件 cpp.cpp
#ifndef _CPP_CPP_
#define _CPP_CPP_
#include <需要用到的库>
#inclde "head.h"
using 需要用到的类或函数或命名空间;
namespace 自定义的命名空间
{
一些实现代码;
}
#endif
这样写的原因如下:
- 需要防止重复包含
- 需要分离定义与实现代码
- 需要自定义命名空间以防命名重复
- 需要在头文件中包含实现文件以简化编译链接过程
附加说明:我所使用的编译器是MinGW-W64 8.1.0
我希望的状态是,能够只包含头文件即可编译整个第三方库,而不用处理复杂的编译链接的情况,也不用自己去编写任何的makefile,比如
比如一个main.cpp
#include <iostream>
#include "head.h"
using namespace std;
using namespace 自定义命名空间;
int main()
{
第三方库功能;
cout << 一些东西;
return 0;
}
随后编译这个文件,只需要
g++ main.cpp -o main.exe
也就是不再需要指定额外的lib文件,也不需要makefile来帮助你进行操作