簡體   English   中英

用cmake包裝字體和着色器

[英]Packaging fonts and shaders with cmake

我正在編寫在Windows,OSX和Linux上運行的OpenGL應用程序。

我與應用程序打包了一些免費的TrueType字體 ,因此用戶可以為我的渲染的文本部分選擇首選字體。

我有一些自己制作的glsl着色器 ,因此我的渲染恰到好處。 我也需要與應用打包

我使用cmake進行構建,並使用cpack進行安裝。 我使用install命令來控制字體和着色器在目標計算機上的位置。

我有C ++代碼,給定字體文件的路徑,它將在渲染的圖像中為我提供正確的字體。 同樣,我有OpenGL代碼,需要在運行時知道着色器在哪里。

在構建機器上,我使用configure_file處理OS /用戶版本。 字體和着色器相對於代碼所在的目錄,因此我可以將它們的位置作為名稱空間變量放入頭文件中,並且陰影和字體代碼始終可以找到它們。

現在,我試圖使已安裝的應用程序正常運行,我遇到了一個問題:在安裝時,我可以將字體和着色器放在目標計算機上我喜歡的任何位置,但是正在努力查看運行時(已安裝)可執行文件的方式可以使目標計算機上的理解該位置在哪里。

編譯器標志? 環境變量? 目標物業? 他們似乎都不完全符合要求。 還是那是錯的? 任何想法將不勝感激。

您有兩種可能:

  • 該應用程序將安裝到用戶選擇的目錄中,但是您可以控制該目錄中的所有內容(CMake稱為安裝樹 )。 因此,您知道所有外部文件相對於可執行文件的位置,因此您可以使用相對路徑來尋址它們(如注釋中所建議 )。 這種方法在OS X和Windows中非常普遍,在OS X和Windows中,每個應用程序通常安裝在其自己的單獨目錄中。 對於Unix-y系統來說,這種情況要少一些,在Unix-y系統中,通常將內容轉儲到/usr/bin
  • 如果您對相對路徑不滿意,則可以始終將所有資源打包到可執行文件本身中。 通常,這是使用資源編譯器完成的,但是CMake對此具有內置支持 這種方法在GUI應用程序中特別流行,該GUI應用程序將其字體和圖標打包到可執行文件本身中。 Qt為此提供了一個跨平台的資源編譯器 ,CMake支持

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應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM