premakeExample
1 简介
本文讲解如何基于premake5创建一个典型的C++解决方案,该解决方案包含三个项目:
- 一个依赖GLFW动态库的动态库项目ExampleDll
- 一个依赖ExampleDll动态库的窗口程序APP
- 一个基于Catch的单元测试程序UnitTest
所有代码已上传Github,链接。
2 你需要准备
- premake5.exe程序
- 一个文本编辑器
- 一个支持C++11的编译器,因为源代码使用了C++11特性
- 一个支持OpenGL 1.1的显卡
3 文件的组织结构
首先需要确定整个解决方案中源代码、三方库、二进制等文件的组织结构,本文创建的文件结构如下:
premakeExample/
|–premake5.lua (premake脚本文件)
|–prj/ (生成的解决方案与各项目配置文件路径)
|–build/
| |–target/ (目标生成路径)
| |–obj/ (中间文件生成路径)
|–bin/ (最终发布的二进制文件路径)
|–3rd/ (第三方库文件路径)
| |–Catch (Catch单元测试框架头文件路径)
| |–glfw (glfw三方库相关文件路径)
4 下载所需文件
本文以64位系统为例,需下载64位二进制库,也可以下载32位,但要记得在后面lua脚本中改变architecture配置。
将下载解压后的include和
lib-vc*
文件夹放在premakeExample/3rd/glfw文件夹下,*
指代不同的vs版本,需与后续生成配置文件的vs版本一致。
将lib-vc*路径下的glfw3.dll拷贝纸premakeExample/bin路径下
- catch是一个只有头文件的依赖库,将Catch.hpp(下载)放在premakeExample/3rd/Catch/include路径下即可。
5 添加代码
5.1 ExampleDll
ExampleDll库只是对glfw中的GLFWwindow进行了简单封装,隐藏了window的内部实现细节。Window类通过_declspec(dllexport)
导出。
- ExampleDll.hpp代码如下:
#ifndef EXAMPLE_DLL_HPP
#define EXAMPLE_DLL_HPP 1
#include <string>
#include <memory>
struct GLFWwindow;
namespace ExDLL
{
class _declspec(dllexport) Window
{
public:
Window(int width, int height, const std::string& title);
~Window();
bool shouldClose() const noexcept;
void pollEvents() const noexcept