【发布时间】:2018-06-25 11:31:48
【问题描述】:
我正在编写一个在 windows、OSX 和 linux 上运行的 OpenGL 应用程序。
我有一些 free-for-commercial-use truetype fonts 与应用程序一起打包,因此用户可以为我的渲染文本部分选择他们喜欢的字体。
我有一些我自己制作的glsl shaders,所以我的渲染是正确的。我也需要将这些与应用程序打包在一起
我使用cmake 构建并使用cpack 构建安装程序。我使用the install command 来控制字体和着色器在目标机器上的位置。
我有 C++ 代码,如果给定字体文件的路径,它将在渲染图像中为我提供正确的字体。同样,我有 OpenGL 代码,它需要在运行时知道着色器在哪里。
在构建机器上,我使用configure_file 来处理操作系统/用户变化。字体和着色器是相对于代码所在目录的,所以我可以将它们的位置作为命名空间变量放入头文件中,着色和字体代码总能找到它们。
现在我正在尝试让已安装的应用程序运行我遇到了一个问题:我可以在安装时将我的字体和着色器放在目标机器上我喜欢的任何位置,但我很难看到运行时 (安装)可执行文件,在目标机器上,可以理解该位置在哪里。
编译器标志?环境变量?目标财产?它们似乎都不太符合要求。或者那是错的?任何想法将不胜感激。
【问题讨论】:
-
在 windows 上,如果字体和着色器集不是用户可补充的,我会简单地使用安装可执行文件的位置的相对路径。将可执行文件安装到“\Program Files (x86)\MyName\MyProgram\MyProgram.exe”,并将资源安装到 MyProgram\Resources(如果重要,可能具有区域设置意识)。然后使用“.\Resources\
”作为路径 -
Linux 必须有一个等效于
GetModuleFileName的文件,它将返回您的可执行文件的路径,然后您可以使用它为您的资源构建路径名。 msdn.microsoft.com/en-us/library/windows/desktop/… -
@RichardCritten:在 linux 上,可执行文件和它们使用的数据通常安装在完全不同的位置。
-
@RichardCritten: Nothing so easy, no.
-
您不能使用相对路径约定并始终将它们放在可执行安装下的子目录中吗?
标签: c++ opengl fonts cmake glsl