0

我最近开始学习 OpenGL,开始使用 C++ 制作一些图形应用程序。我已经安装了 OpenGL SDK,并且能够在其上正确构建项目。但是,在 OpenGL SDK 站点上,几乎没有关于如何使用 SDK 的元素(例如 freeglut 等)创建新项目的信息。我有 Premake 4.0,我知道我必须对lua 文件,但是我不知道 lua 并且不确定如何使用 Lua 文件来创建新项目。那你能帮帮我吗?我使用VS2010,我应该创建项目,然后用premake做点什么吗?或者创建某种lua文件,然后使用premake?任何帮助都会很棒,因为我非常迷茫,并且真的很想开始使用 OpenGL。我对此进行了很多实验,

4

1 回答 1

4

如果您不熟悉 Premake4,那么我强烈建议您直接使用 Visual Studio 项目。如果您对此有疑问,请使用您所做的以及 Visual Studio 在尝试构建时给您的错误消息来修改您的问题。你应该包括:

  • 包含路径。完整的包含路径集,包括完整的绝对目录名称(包括项目和解决方案文件的路径)。
  • 静态库搜索路径。
  • 您包含的静态库。
  • 您正在构建的定义。

注意:如果你不知道这些是什么,那么你需要停下来学习更多关于 C++ 项目如何工作的知识。您需要了解编译器如何处理包含路径、静态库、#defines 等。


如果您对 Premake4 不熟悉,并且仍然想使用带 SDK 的 Premake4,那么您首先必须熟悉不带SDK的 Premake4 。我可以给你一个完整的 premake4.lua 脚本,你可以插入它,改变几行,一切都会神奇地工作(如果你愿意,你可以看看 SDK 的示例是如何构建的。特别是examples/premake4.lua)。但如果我那样做,你就什么也不到。你只是复制和粘贴代码,对它的工作原理一无所知。

因此,我将告诉您应该采取哪些步骤来学习如何使用 Premake4。

第 1 步: Hello World,Premake 风格。您应该创建一个 .cpp 文件,它是一个 Hello World 应用程序。它只有一个标准main功能,可以将“Hello World”打印到控制台。那是容易的部分。

困难的部分是 Premake4 脚本。您将编写 Premake4 脚本来为您构建该项目,而不是直接创建 Visual Studio 项目。

Premake4 文档可以引导您完成制作您的第一个解决方案和项目的步骤。您当然需要将文件添加到该项目。您还应该学习如何使用配置,以便您可以进行调试和发布构建。Debug 构建应该有符号,并且 Release 构建应该被优化。

第 2 步:多个项目。在这里,您有两个 .cpp 文件:test.cppmain.cpp. 在test.cpp中,放置一个打印某些内容的函数。该函数不应该带参数或任何东西。在main.cpp中,您应该拥有main调用 中定义的函数的函数test.cpp。还应该有一个test.h其中定义的函数的原型test.cpp

这里的诀窍是你没有将它们编译成同一个可执行文件。不是直接的。您需要两个项目:一个命名test的,一个命名main的。该test项目应该是一个静态库,可以编译test.cpp. 该main项目将是实际的可执行文件,它编译main.cpp. 他们都应该包含test.h在他们的文件列表中。

在这里,您了解到解决方案可以有多个projects。这两个项目有不同的文件列表。每个项目都可以有一个单独的kind,它单独确定该项目的构建类型。test项目应该是一个StaticLib,而项目main应该是一个ConsoleApp

您还需要学习使用links命令将它们链接在一起。该main项目应使用links指定test. test不需要链接到某些东西。

第三步:掌握目录。

在这里,您将执行与步骤 2 相同的操作。除了一件事:将test.htest.cpp放在不同的目录(当前目录的子目录)中。您还需要test.lua该目录中的文件,您将premake4.lua使用命令从主文件执行该文件dofile。这test.lua是您定义test项目的地方。使用命令创建解决方案后,您可以随时调用dofile该文件。test.luasolution

请注意,该main项目将需要更改它找到的目录test.h。您还需要includedirs在项目中使用该命令main来告诉编译器在哪里搜索test.h您包含在main.cpp.

第 4 步:返回 SDK。在这一点上,您现在应该对 Premake4 足够熟悉,可以回顾我向您指出的说明并更好地理解它们。然后,按照说明进行操作。当它告诉您脚本的第一行应该是什么时,请将其作为脚本的第一行。将UseLibs函数放在它说要放置它们的地方;它甚至给你一个例子来说明它的去向。将其视为和UseLibs的奇特组合。linksincludedirs

于 2011-11-25T05:36:14.567 回答