我正在编写一个在Windows,OSX和Linux上运行的OpenGL应用程序。
我有一些free-for-commercial-use truetype fonts我在应用程序中打包,因此用户可以为我的渲染文本部分选择他们喜欢的字体。
我自己制作了一些glsl shaders,这样我的渲染才能做到正确。我也需要用app打包这些
我使用cmake构建并使用cpack构建安装程序。我使用the install command来控制字体和着色器在目标计算机上的位置。
我有C ++代码,给定一个字体文件的路径,它会在渲染图像中给我正确的字体。同样,我有OpenGL代码,需要在运行时知道着色器的位置。
在构建机器上,我使用configure_file来处理操作系统/用户变体。字体和着色器是相对于代码所在的目录,因此我可以将它们的位置作为命名空间变量放入头文件中,并且着色和字体代码始终可以找到它们。
现在我试图让已安装的应用程序正常运行我遇到了问题:我可以在安装时将我的字体和着色器放在目标计算机上的任何位置,但我很难看到如何在目标机器上运行(安装)可执行文件以了解该位置的位置。
编译器标志?环境变量?目标财产?他们似乎都不太合适。或者那是错的?任何想法都会非常感激。
答案 0 :(得分:3)
这里有两种可能性:
/usr/bin
。答案 1 :(得分:1)
Linux有一个非常不同的安装理念。资源安装在标准位置,这些位置不位于二进制本身的固定相对位置(窗口在这个方向上与ProgramData和.AppData有些相似)
Linux的方法是使用fontconfig来定位字体,然后在/ usr / share / fonts / myapp或用户目录(〜/ .fonts / myapp甚至更好的新XDG)中在系统范围内安装字体位置)
对于着色器,它与系统范围内的/ usr / share / myapp和用户端的XDG位置类似(https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html)
当然你可以在你的代码中强制你想要的任何东西,并安装在/ opt中,它永远不会像用户POW那样是一个集成的linux应用程序