2017-10-05 110 views
-1

對於我的WINAPI項目,我使用atom IDE與c編程,我可以編譯我的代碼從cmd提示沒有問題,直到我已經開始使用.rc文件。但現在我在編譯我的程序之前使用了rc文件,我需要在cmd提示符下運行這些命令。Cmd提示窗口編譯

gcc -c jake.c 
gcc -o jake jake.o -mwindows 
windres -o jakerc.o jakerc.rc 
gcc -o jake jake.o jakerc.o -mwindows 

一次又一次地輸入它們,看看我的程序每次工作是否真的很單調。 (也請不要告訴我使用像DEV C++或Visual Studio這樣的IDE,因爲我不喜歡它們,因爲我不喜歡它們,因爲我喜歡原子。)

所以我想出了這個解決方案。我已經制作了一個名爲compile.c的額外文件,其內部看起來像這樣。

#include <stdio.h> 
#include <stdlib.h> 

int main() { 

    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -c jake.c"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -o jake jake.o -mwindows"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul windres -o jakerc.o jakerc.rc"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -o jake jake.o jakerc.o -mwindows"); 
    return 0; 
} 

當我編譯和運行這個程序我得到這個錯誤:

'C:\\Users\\hashtag\\Desktop\\rawsock\\kokul' is not recognized as an internal or external command, 
operable program or batch file. 

如何擺脫這種錯誤的,而且我怎麼自動當我運行compile.exe編譯我的文件嗎?

+3

使用參數化的批處理文件 –

+0

你能證明它只是爲了確保? @SebastianL – turmuka

+1

我看到了兩個選擇:可以創建一個'.bat'腳本文件,它爲你完成所有這些。或者學習如何使用'make','nmake'或類似的工具。 –

回答

1

,我建議使用批處理文件而不是一個編譯的C程序。

例子:

@ECHO off 
SET workingDirectory=%~dp0 
SET fileName=%1 
echo using %workingDirectory% as working directory 
gcc -c %fileName%.c 
gcc -o %fileName% %fileName%.o -mwindows 
windres -o %fileName%rc.o %fileName%rc.rc 
gcc -o %fileName% %fileName%.o %fileName%rc.o -mwindows 

你可以用nameofthebatchfile.bat jake

1

只要ko​​kul是一個目錄,在命令行

C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -c jake.c 

沒有道理。 您可以組合多個命令。如果您想更換成目錄kokul然後開始編譯,這將工作

CD C:\\Users\\hashtag\\Desktop\\rawsock\\kokul & gcc -c jake.c 

但無論如何寫一個批處理文件更容易:

在我的評論中提到
1

運行desiered命令你可以用兩行

windres -o jakerc.o jakerc.rc 
gcc -o jake jake.c jakerc.o -mwindows 

保存他們這樣做是爲了文件 「mj.bat」,然後通過鍵入「mj」運行窗體命令提示符。

當你的項目增長超過兩個THRE文件,你應該使用的makefile GCC and Make Compiling, Linking and Building C/C++ Applications

檢查也atom-shell-commandsrun-command包的Atom。你可以直接運行這個表單編輯器。

0

如果你正在使用命令行工具,這個任務似乎只是爲了一個Makefile而哭泣。 make不僅會自動執行必要的操作,它還會嘗試從文件時間戳中找出實際需要執行的操作。例如,如果您未更改C源文件,則無需重新編譯它。 make或類似的效果會隨着您的應用程序變得更大並且組件之間具有更復雜的依賴關係而大大增加。

你可以用簡單的批處理文件做一些這些東西,但理想情況下,當任何步驟遇到錯誤時,需要停止批處理文件。進行長時間的註冊失敗的構建過程沒有任何意義,並且在無關輸出的頁面中查找相關的錯誤消息可能是一件苦差事。這是make正確的另一回事。

使用它們的神祕語法可能需要一段時間才能成爲Makefiles的頂層。但是,長期來看,這種努力將獲得多次獎勵。