2011年7月26日 星期二

如何build出不需要另外建置環境的QT exe檔

目標是如何在透過QT寫出執行檔,並且直接在另一台沒有QT的library環境上執行

測試過程:
下載程式碼:

1. 先讓qmake去掃整個程式檔案架構 (產生hello.pro)
%> qmake -project

2. 再用qmake依hello.pro產生Makefile
%> qmake

3. 開始編譯
%> mingw32-make release

若直接在原本的command windows執行檔案,會成功,但是,若是用點滑鼠點兩下的方式,會失敗,並且出現出現找不到mingwm10.dll的錯誤。
原因是,目前使用的是動態連結lib的方式,所以,在執行時,會去%PATH%的目錄中尋找相對應的lib。因為,我們若是用QT的command windows,因為,%PATH%都已經設定好了,所以,可以找到相對應的lib。
若我們直接用滑鼠點兩下的方式,吃的是系統預設的PATH,所以,會出現找不到lib的錯誤訊息。
有兩個解決方式
1. 把需要的lib放在系統的%PATH%路徑中
2. 編譯出靜態連結執行檔(執行檔會變的比較大)

Q: 出現找不到mingwm10.dll錯誤
A1: 在Makefile裡面把-mthreads刪除
A2: 直接在hello.pro加入以下內容 (參考qmake.conf相對應的Flag)
QMAKE_CXXFLAGS_EXCEPTIONS_ON -= -mthreads
QMAKE_LFLAGS_EXCEPTIONS_ON -= -mthreads
A3: 直接在win32-g++\qmake.conf 移除掉所有的"-mthreads".

Q: 出現找不到libgcc_s_dw2-1.dll錯誤
A1: 在Makefile裡面的FLAGS加入-static

Q: 出現找不到QtCore4.dll錯誤
A1: ...
A2: 直接把mingwm10.dll, libgcc_s_dw2-1.dll, qtcore4.dll, qtgui4.dll放到與執行檔同一個目錄

參考資料:
用Qt Creator開發Windows的簡單計算機的程式
記錄-如何建立MSVS的Qt編譯環境?
[Mobile]Nokia的開發工具-Qt framework
[Qt密技]執行Qt程式時找不到相關dll檔該怎麼辦?
Removing mingwm10.dll dependency
QT static 出現找不到libgcc_s_dw2-1.dll
windows下 Qt 静态编译
Qt 程序在 windows 下的发布
Deploying an Application on Windows

2011年7月11日 星期一

2011年7月8日 星期五

在Source Insight直接透過vim打開目前的檔案

透過以下的設置,可以直接在Source Insight透過Vim打開目前已開啟的檔案。

我直接在Alt+a設定成呼叫Vim,並且跳到游標所在的行~

1. Source Insight工具列OptionsCustomer Command...Add...New Command name填入EditWithVim
2. 在Run的欄位填入: E:\Portable\PortableApps\gVimPortable\gVimPortable.exe --remote-tab-silent +%l %f
意思是說透過vim打開目前的檔案,並且跳到指定的行
%l指的是當前的行
%f為檔案名稱
3. Source Insight工具列OptionsKey Assignments
4. 在Command的欄位打入EditWithVim,並且按Assign New Key...→直接按Alt+a

大功告成了

[2012.08.02 補充]
設定Source Insight可以直接打開目前檔案的目錄
設定的流程跟上面類似

我直接在Ctrl+d設定成開啟目前瀏覽檔案的目錄~

1. Source Insight工具列OptionsCustomer Command...Add...New Command name填入Explore Project Folder
2. 在Run的欄位填入: explorer %d

意思是說開啟目前瀏覽檔案的目錄~
%j為the source directory of the current project
3. Source Insight工具列OptionsKey Assignments
4. 在Command的欄位打入Explore Project Folder,並且按Assign New Key...→直接按Ctrl+d

完成~~

[2014.03.31 補充]
開啟Project的根目錄,
而這一個要可以work,
在建立目錄時,必需要設定project的根目錄在哪裡。


在Options→Customer Commands→Add→Explore Project Root Folder→在Run裡面輸入「ShellExecute explore %j」→Close

Options→Key Assignments→選擇「Explore Project Root Folder」→按「Assign New Key...」→接著按你想輸入的key

參考資料:
鱼与熊掌可兼得: vim和source insight的配合使用
source Insight常用自定义命令和一些小技巧[z]
Source Insight Help - Custom Commands

2011年7月6日 星期三

Source Insight macro

utils.em放在「我的文件\Source Insight\Projects\Base

其中utils.em設定了一些macro

OptionsKey Assignments的Command打入我們在utils.em自定的macro。

然後,再按Assign New Key...來設定hot key

下面有macro sample可以參考

Source Insight Macro

參考資料:
Accelerate your efficiency -- Shortcut key in Source Insight

source Insight常用自定義命令和一些小技巧[z]

2011年7月5日 星期二

errorlevel

如果您正在撰寫即將要從一個使用 IF ERRORLEVEL 命令的 MS-DOS 批次檔中叫用的程式,
您可以使用 「 終止處理程序與傳回碼 」 您程式中設定 errorlevel 插斷 21 H 函數 4CH。
此函式會終止程式,
並傳回該 errorlevel 至父處理序在這種情況下是 COMMAND.COM 執行批次檔。

參數的插斷 21 H、 函式 4CH 是 AH = 4CH AL = 後面接著一個呼叫的 errorlevel 來插斷 21 H.

errorlevel 可以是任何範圍 0 至 255 (0 到 FF 十六進位) 中的值。

參考資料:
在程式中設定 MS-DOS errorlevel