2017-10-05 164 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的顶层。但是,长期来看,这种努力将获得多次奖励。