2016-06-26 238 views
2

我正在使用動態編譯和加載的庫。我爲解決這個問題而創建的一個簡單的解決方案就是創建一個我稱之爲編譯所有內容的bash代碼,但是我目前正致力於將它移植到Windows上,並且我不知道如何實現相同的結果。從代碼內編譯QT源代碼

另外,這是一個QT應用程序,所以需要使用qmake而不是g ++。我執行

代碼:(我總是與文件名的一個參數提供這個)

#! /bin/bash 

cd "${0%/*}"; 
if [ $# = 0 ]; then echo "Error: No Arguments Supplied"; exit 7; fi; 
if ! [ -a "$1.cc" ]; then echo "Error: Invalid Arguments Supplied"; exit 7; fi; 

rm -f "$1.so"; 

cp template.pro tmp.pro; 
echo "QT += widgets" >> tmp.pro; 
echo "SOURCES += $1.cc" >> tmp.pro; 
echo "CONFIG += c++11" >> tmp.pro; 

qmake -norecursive tmp.pro; 
make; 
mv libtmp.so.1.0.0 "$1.so"; 

rm -f Makefile tmp.pro *.o; 
find . -name 'libtmp.so*' -delete; 

回答

1

首先,你需要在Windows機器上安裝的是bash。例如讀取herehere(我相信還有很多其他來源,你可以閱讀有關在Windows上執行bash腳本)

其次,很遺憾,您template.protmp.pro文件不會的Linux(或Unix)和Windows之間的兼容。代碼中最明顯的示例是libtmp.so - Windows庫上將有不同的名稱和擴展名.dll,但也會有其他差異。

你需要在你的.pro文件中使用條件:

# 
# Windows section: 
# 
win32 { 
# pro text for Windows here 
} 

# 
# Linux/Unix section 
# 
unix { 
# pro text for Linux/Unix here 
} 

# possible common part here 
+0

感謝您的.pro文件的建議。 我寧願不必在機器上安裝任何新東西,我正在試圖使這種便攜式 - 這是一個學校項目,他們告訴我們有點晚,它必須在Windows上運行。 – areuz

+0

我不確定你可以在所有「裸」的Windows和Linux機器上(即沒有安裝額外的軟件)編寫一個將「準備使用」的腳本。至少我不知道任何兩種系統都支持的腳本語言「開箱即用」。我擔心你需要編寫你的小軟件(可能使用Qt)併爲Linux和Windows構建它 – mvidelgauz