2014-01-11 55 views
-2

我正在創建一個應用程序,它將根據最終用戶輸入到程序中的內容創建一個可用的可執行文件。從另一個程序創建一個程序?

例如:

if (make_annoying_sounds == true) 
{ 
    //Generates an executable that makes annoying beeping sounds 
} 
else 
{ 
    //Generates an executable that doesn't make annoying beeping sounds 
} 

基本上,我想我的程序生成/創建另一個程序。我見過/使用過許多這樣的程序。我在互聯網上搜索過,找不到任何東西。所有的幫助表示讚賞。 (從我的程序中創建一個程序)。

回答

0

你需要做到以下幾點:

  1. 基於用戶輸入,生成自定義程序的代碼。
  2. 將該代碼編譯爲可執行文件。
+0

謝謝,這正是我想要做的。但是,如何從我的應用程序中編譯該程序(生成的程序)? – Sedulous

+0

創建一個運行編譯器的新進程,將生成的程序作爲其輸入 –

1

嘗試在創建源文件後使用基本的system調用來調用編譯器。

你可以只是stdio.h

安全注意事項的實用程序創建的源文件:system已知函數是危險的。如有疑問,請調用類似exec的函數來調用編譯器。儘管exec會清除當前正在運行的進程,因此如果要在編譯完成後繼續執行某些操作,則應該使用fork,然後再撥打exec

+0

謝謝,這應該可以正常工作。有沒有其他的方法來做到這一點?儘管如此,這應該無論如何。編輯:沒關係,謝謝! – Sedulous

+0

@Sedulous除非你想自己實現編譯例程,這是很多工作,或者你想調用編譯器的私有API,這是非常不可靠的,因爲API可以在沒有通知的情況下改變,最好是創建一個單獨的過程。 – randomusername

0

Theorically,你可以,這取決於用戶的輸入,讓你的C代碼生成您if語句中的C代碼。然而,這將是相當困難的。

我認爲最好的方法是製作一個獨立的C引擎,它只執行所有生成的程序可以執行的函數(例如播放參數中給出的聲音)。你試圖編碼的程序(不是引擎,而是帶有if語句的程序,我們稱之爲「主程序」)必須生成實現算法的代碼,該算法將選擇引擎的哪個函數以及何時調用。這個生成的代碼應該用lua這樣的腳本語言編寫,因爲in比生成腳本代碼更容易。因此,應該將引擎設計爲能夠與Lua腳本進行通信。當用戶點擊主程序的最終「生成程序」按鈕時,主程序調用gcc編譯引擎和Lua腳本以生成用戶試圖創建的程序。這很長,但我認爲這是正確的做法。