我不確定這是否是問這個問題的最佳地點 - 如果有更好的地方,請為我指出正確的方向。
假設我有兩台機器 - A 是開發機器,B 是生產機器。 A 擁有類似編譯器的軟體,可用於從原始碼建立軟體,而 B 則沒有。
在 A 上,我可以按照通常的例程輕鬆地從原始碼建立軟體:
./configure
make
然後,我可以透過執行在 A 上安裝建置的軟體sudo make install
。然而,我真正想做的是安裝我剛剛在 B 上建立的軟體。
我考慮過以下幾種選擇:
- 使用套件管理器在 B 上安裝軟體:這對我來說不是一個選擇,因為套件管理器中可用的軟體非常過時。
- 在 B 上安裝編譯器和其他建置工具:由於各種限制,我不想在生產機器上安裝建置工具。
- 手動將二進位檔案從 A 複製到 B:這很容易出錯,並且我想確保二進位檔案在生產電腦上以一致的方式安裝。
- 僅
make
在 B 上安裝,傳輸源目錄,並sudo make install
在 B 上運行:這是迄今為止我找到的最佳解決方案,但由於某種原因(可能是時鐘偏移),make
將嘗試重新構建應該已經存在的軟體由於B 上未安裝建置工具,因此失敗。
如果有一種方法可以製作某種包含構建的二進製文件的包,可以傳輸和執行該包來安裝二進製文件和配置文件,那就太好了。是否存在這樣的工具?
答案1
使用您到目前為止所擁有的內容,如果 makefile 是使用 GNU 自動工具產生的,我將設定目標位置或安裝路徑和
./configure --prefix=/somewhere/else/than/the/usual/usr/local
然後運行
make && make install
最後將前綴資料夾中的檔案複製到usr/
另一台機器上的資料夾中。這是假設兩台機器具有相同的架構,如果不是,則使用相應的交叉工具鏈。
答案2
最簡潔的方法可能是使用作業系統使用的打包工具為應用程式建立包,然後像其他任何程式一樣安裝它。如何做到這一點因套件管理器和系統而異),並且存在一定的學習曲線。
/opt/packagename
如果來源套件支援在某個子樹(例如或/usr/local/packagename
)中安裝軟體,則手動安裝可能會更容易一些。在一台電腦上編譯並安裝,然後將該子樹複製到另一台電腦上的相同位置。該目錄應僅包含所有相關文件。
如果您需要更改/etc
,則必須手動執行這些操作。此外,要實際存取二進位文件,您必須將它們符號連結到路徑中的某個目錄,或將軟體包bin
目錄新增至路徑。大多數使用autoconf
/ 的軟體包automake
都可以將--prefix
參數傳遞給./configure
腳本來設定安裝路徑。
無論如何,您需要找出您編譯的應用程式需要哪些函式庫等,並確保兩台機器上都有相容的版本。