【问题标题】:Cmd prompt windows compilingcmd提示windows编译
【发布时间】:2017-10-05 08:40:25
【问题描述】:

对于我的 WINAPI 项目,我使用 atom IDE 和 c 编程,我可以从 cmd 提示符编译我的代码,直到我开始使用 .rc 文件。但是现在我在编译程序之前使用的是 rc 文件,我需要在 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,因为我不喜欢它们,因为我喜欢 atom。)

所以我想出了这个解决方案。我制作了一个名为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 时自动编译我的文件?

【问题讨论】:

  • 使用参数化批处理文件
  • 你能把它展示出来以确认一下吗? @SebastianL
  • 我看到两个选择:要么创建一个 .bat 脚本文件,它会为您完成所有这些工作。或了解如何使用makenmake 或类似工具。
  • 另外,第二个命令 (gcc -o jake jake.o -mwindows) 没有任何意义,因为您在链接资源时会覆盖可执行文件。
  • 如果您喜欢 Atom,请试一试Visual Studio Code。基本上是同一个编辑器,但也提供complete C++ programming support。您可以将编辑器配置为使用任何编译器。还附带调试器支持(如 GDB 或 LLDB)。都可以通过文本文件进行配置。

标签: c windows winapi cmd command-prompt


【解决方案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 运行您想要的命令

【讨论】:

    【解决方案2】:

    只要kokul是一个目录就可以命令行

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

    没有意义。 您可以组合多个命令。如果你想切换到 kokul 目录并开始编译,这将起作用

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

    但无论如何编写批处理文件要容易得多:

    【讨论】:

      【解决方案3】:

      两行就可以了

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

      将它们保存到文件“mj.bat”,然后通过键入“mj”运行表单命令提示符。

      当您的项目超过两个或三个文件时,您应该使用 makefile GCC and Make Compiling, Linking and Building C/C++ Applications

      还要检查 atom-shell-commandsrun-command 包以获取 Atom。你可以直接运行这个表单编辑器。

      【讨论】:

        【解决方案4】:

        如果您使用的是命令行工具,那么这项任务似乎需要一个 Makefile。 make 不仅会自动执行必要的操作,还会尝试从文件时间戳中找出实际需要执行的操作。例如,如果您没有更改 C 源文件,则不需要重新编译它。 make 或类似的有效性将随着您的应用程序变得越来越大并且组件之间的依赖关系越来越复杂而大大提高。

        您可以使用简单的批处理文件来完成其中的一些工作,但理想情况下,当任何步骤遇到错误时,批处理文件需要停止。进行注定要失败的长期构建过程是没有意义的,并且在不相关的输出页面中找到相关的错误消息可能是一件苦差事。这是make 做得对的另一件事。

        可能需要一段时间才能掌握 Makefile 及其晦涩的语法。但是,从长远来看,付出的努力会得到很多倍的回报。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多