2013-05-17 33 views
0

我在編譯和運行記事本++中的C代碼時遇到問題。 我現在用的是nppexec插件並寫在腳本部分下面按F6鍵後:編譯並運行記事本++中的C代碼

C:\MinGW\bin\gcc.exe -g "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" 

$(CURRENT_DIRECTORY)\$(NAME_PART).exe 

按下確定後,我得到的控制檯上執行以下操作:

C:\MinGW\bin\gcc.exe -g "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.C" -o "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe" 
Process started >>> 
<<< Process finished. (Exit code 0) 
D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe 
Process started >>> 

這裏,substitution.c是我的程序要運行。問題是gcc部分工作正常,但我無法從這裏執行程序,因爲沒有任何迴應。

正如你所看到的,它只是說過程開始,之後沒有任何東西。沒有響應被按下的鍵,它只是接受一切,如文本編輯器。

如果我去工作目錄並從那裏執行程序(雙擊exe文件),那麼它似乎運行得很好。問題似乎在我的腳本或插件。

請問任何人都可以知道我的編譯和運行腳本有什麼問題嗎?

回答

4

除了@paxdiablo的答案,你也可以找到有用的下面NppExec腳本單個文件的項目:

npp_save 
cd "$(CURRENT_DIRECTORY)" 
cmd /c del "$(NAME_PART)".o "$(NAME_PART)".exe *.o 
C:\MinGW\bin\gcc.exe -g3 -std=c89 -pedantic -Wall -Wextra -Wno-nonnull "$(NAME_PART)".c -o "$(NAME_PART)".exe 
npp_run "$(NAME_PART)".exe 

的第一行保存當前正在裏面記事本+有源文件。

第二行確保您的當前目錄是活動文檔中的一個。這可以避免在其餘行中使用"$(CURRENT_DIRECTORY)"變量。

第三行刪除以前成功編譯的所有可執行文件和對象文件剩餘部分。刪除最後一個可執行文件是個不錯的主意,因爲如果不這樣做,最後一行將導致由最後一次編譯生成的.exe,即使當前編譯失敗。一個失敗的編譯不會生成一個.exe,所以通常你不希望NppExec運行以前的.exe。刪除以前生成的目標文件是可選的,但它確實可以確保它不會影響新的編譯(作爲touch命令行工具的替代方案,它在多文件項目中更有意義)。

第4行編譯活動文檔。根據您的需求隨意修改gcc的選項。如果您將C:\MinGW\bin添加到Windows PATH環境變量中,並假設您的系統上只安裝了一個gcc安裝,則可以跳過絕對路徑,而只需寫入gcc

最後一行執行生成的可執行文件。 npp_run命令告訴NppExec啓動一個新的命令提示符窗口,並在其中運行你的程序(除非它是一個WIN32 GUI程序)。相比嵌入記事本++的NppExec控制檯,我個人發現它更方便。它看起來更自然,它也避免了NppExec控制檯的一些I/O重定向問題。但是,如果您的程序是一個控制檯應用程序,不會與用戶通過循環進行交互,那麼此方法將導致啓動的命令提示符窗口在程序終止後立即關閉,而不會讓您有機會檢查其輸出。在這種情況下,您應該讓程序等待用戶在其終止之前按下某個鍵。一種快速和骯髒的方法是將system("pause");放在main()函數的return和/或exit()語句之前(儘管爲此寫了一個簡單的跨平臺函數或宏好得多)。

您可以通過在F6的<temporary script>中輸入以上腳本進行試驗,並在您對其行爲感到滿意時將其永久保存以供一般性使用。

在附註中,您可能還會發現看看this post,我試圖解釋如何設置NppExec以便它跳轉到源代碼中相應的行,通過雙擊在編譯期間gcc在NppExec控制檯中吐出任何錯誤。

+0

我找到了答案,我實際上並沒有做整個事情,只有我必須添加npp_run。 謝謝哈利。 – Sohaib

+0

非常歡迎您,很高興提供幫助。 –