2011-12-02 134 views
4

qmake生成以下(在其他人中)規則安裝一個目標:如何使用駐留在生成的Makefiles中的INSTALL_ROOT?

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)" 

*.pro文件我無法設置INSTALL_ROOT像這樣的東西

isEmpty(INSTALL_ROOT) { 
    INSTALL_ROOT=/usr 
} 

因爲INSTALL_ROOT是某種本地產生Makefile文件。根據我迄今發現的情況,INSTALL_ROOT默認爲空。它可以像

INSTALL_ROOT=$HOME make install 

當調用make,這很好。不過,我希望能夠指定默認安裝根目錄,比如/usr。我可以按照建議here引入一個新變量PREFIX。 然後生成的規則看起來像(如果PREFIX設置爲/usr

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/usr/$(TARGET)" 

然而

INSTALL_ROOT=$HOME make install 

安裝目標/home/<user_name>/usr/$(TARGET)這是不是人們所期望的。

所以設置INSTALL_ROOT一些默認值會產生一致的行爲,這是優於添加PREFIX,但如何在*.pro文件中設置INSTALL_ROOT

INSTALL_ROOT的目的是什麼?它應該用於所有?

回答

3

我在這裏回答Windows。您似乎在使用UNIX,Linux或Mac OS X,因此您可能需要進行一些更改。

INSTALL_ROOT是一個記錄不完善的功能,似乎已經添加了,所以沒有root或admin權限的用戶可以在他們的本地文件系統中安裝Qt。這實際上是一個黑客,因爲你已經看到,不可能指定一個任意的目標,但你可以隨時將文件移動到所需的位置。

5

INSTALL_ROOT適用於包構建系統,如NSIS,debian或任何其他用於構建軟件並交付它的方式。

爲此你想要的

INSTALL_ROOT=$PWD/package_root make install 

結果創造條件$ PWD/package_root一棵樹恰好模仿你的目標系統上您計劃傳遞給。請注意,您需要INSTALL_ROOT作爲完整路徑(因此是$ PWD),而不是相對路徑。

創建軟件包時,可以將該樹壓縮到存檔中,然後安裝過程將同一棵樹解壓縮到目標文件系統。

$PWD/package_root/usr/bin/my_binary 

會得到安裝到

/usr/bin/my_binary 

目標。

所以這就是INSTALL_ROOT的問題的答案。要回答如何指定「默認安裝根目錄」,需要有關您想要實現的更多信息。

看一看QMAKE -query的輸出:

[email protected]:~$ qmake -query 
QT_INSTALL_PREFIX:/usr 
QT_INSTALL_DATA:/usr/share/qt4 
QT_INSTALL_DOCS:/usr/share/qt4/doc 
QT_INSTALL_HEADERS:/usr/include/qt4 
QT_INSTALL_LIBS:/usr/lib/i386-linux-gnu 
QT_INSTALL_BINS:/usr/bin 
<snipped> 
QT_VERSION:4.7.4 

和QMAKE使用安裝變量:http://doc.qt.digia.com/qt/qmake-environment-reference.html#installs - 和How do I specify input the QMake INSTALLS variable?

默認情況下,如果你只是做

target.path = $$[QT_INSTALL_BINS] 
INSTALLS += target 

然後你的二進制文件將被安裝在任何qt認爲是正確的地方QT_INSTALL_BINS。您可以通過將target.path設置爲其他值來更改這些默認值。 Qt提供這些路徑,但它取決於你使用它們。

你可以做

MY_DEFAULT_INSTALL=/opt/myproj 

somedocs.files = docs/index.html 
somedocs.path = $$MY_DEFAULT_INSTALL/docs 

target.path = $$MY_DEFAULT_INSTALL/bin 

INSTALLS += somedocs target 

例如,在MY_DEFAULT_INSTALL是在你的.pro文件的一個地方,它定義了安裝的默認。

相關問題