還有乙個問題是自動生成makefile,在linux下有autoconf及automake這兩個工具能實現,搜了一上午也沒找到win32版本的。只好放棄了makefile,直接用gcc的編譯,將所有的.c檔案全編譯成.o檔案,然後集中到乙個debug資料夾中,進行鏈結。這個開發環境是面向初學者的,沒有makefile應該不會有太大的問題。
在vc中呼叫dos命令呼叫gcc來編譯,找到了三種呼叫方式,分別是
system(lpctstr cmd);
uint winapi winexec(
__in lpcstr lpcmdline,
__in uint ucmdshow
);
以及
hinstance shellexecute(
hwnd hwnd,
lpctstr lpoperation,
lpctstr lpfile,
lpctstr lpparameters,
lpctstr lpdirectory,
int nshowcmd
);
他們的區別在於
system()在呼叫的時候會閃過乙個dos視窗,不能用。
winexec不能使用操作符,像重定向,管道等。不過可以通過第二個引數將視窗隱藏。
shellexecute也能隱藏視窗,並且功能強大。一開始我想直接用shellexecute呼叫gcc進行編譯,卻也不能使用操作符。後來呼叫cmd,其他命令用作引數,完全可以執行dos下的所有命令。
build_cmd=gcc+option+build_obj+file_str+" 2>>"+dir+"\\stderr";
block_shellexecute(null,"open","cmd","/c "+build_cmd,project_dir,sw_hide);
不過要注意,那些需要輸入的命令不可用,會進無限等待。另外,我還遇到了另乙個問題,shellexecute並不是阻塞執行,因此可能第一步的.o檔案還沒完成生成,就執行了鏈結導致出錯。一開始我用判斷.o檔案是否完全生成來解決,這樣做還得先判斷是否編譯出錯,並不是乙個好辦法。後來找到了乙個更好的解決辦法,通過判斷程序是否退出來實現阻塞,**如下:
void block_shellexecute(hwnd hwnd,lpctstr lpoperation,lpctstr lpfile,lpctstr lpparameters,lpctstr lpdirectory,int nshowcmd)
closehandle(si.hprocess);
}
接下來要試著做除錯模組,現在還沒有什麼想法,頭疼。 C語言 編譯環境
在ansi c 的任何一種實現中,存在兩種不同的環境。第一種是翻譯環境,這裡源 被轉換成可執行的機器指令。第二種就是執行環境,它用於實際執行 標準說明,這兩種的環境不必位於同一臺機器上。翻譯 翻譯階段的幾個步驟 1.組成乙個程式的每個原始檔通過編譯過程分別轉換成目標 object code 2.每個...
C語言編譯環境
學習c語言其實已經很久了,大學期間學的是c 但是也基本是按照c的套路來學習的,所以嚴格來講c語言也不能是自學的,而且c 的只是也早就還給老師了,今天要說的不是語言本身,工欲善其事必先利其器,今天要說的是學習語言需要的編譯環境,我上大學的時候用的是vc 6.0,是比較經典的一款ide,但就是因為用了很...
C 模組呼叫 C 編寫模組
c 模組呼叫 c 編寫模組 涉及知識點 1 ifdef cplusplus extern c 處理其中的 要明白為何使用extern c 還得從cpp 中對函式的過載處理開始說起。在c 中,為了支援過載機制,在編譯生成的彙編碼中,要對函式的名字進行一些處理,加入比如函式的返 回型別等等.而在c 中,...