【问题标题】:UNIX cc executable locationUNIX cc 可执行位置
【发布时间】:2011-04-06 18:34:16
【问题描述】:

当我使用cc 命令编译.c 文件时,它会创建一个a.out 可执行文件。我注意到它在我的当前目录中创建了a.out 文件。有没有办法让a.out 文件与.c 文件在我碰巧在系统上的同一目录中创建?

例如,如果我的当前路径是~/desktop,我输入命令:

cc path/to/my/file/example.c

它在~/desktop 目录中创建a.out 文件。我希望它在path/to/my/file/a.out 中创建a.out 文件

【问题讨论】:

  • 除了已经发布的答案(并且应该有帮助),我建议学习如何编写Makefile(如果您的项目可能的话,也许如何使用 autoconf/automake变大)。

标签: c unix executable cc


【解决方案1】:

是的,-o

cc path/to/my/file/example.c -o path/to/my/file/a.out

【讨论】:

    【解决方案2】:

    您可以给出“-o”标志来定义输出文件。例如:

    cc path/to/my/file/example.c -o path/to/my/file/a.out
    

    【讨论】:

      【解决方案3】:

      它可能不是您想要的,但您可以使用 -o siwtch 轻松重定向编译的输出,如下所示:

      cc -o /a/dir/output b/dir/input.c
      

      我不知道如何归档,你想要什么(自动替换),但我想你可以用这样的 bash 来做到这一点:(我的脚本很差,未经测试,可能是错误的):

      i = "a/path/to/a/file.c" cc -o ${i%.c} $i
      

      这应该将 i 中指定的文件编译为同一目录中的输出文件,但删除 .c 后缀。

      【讨论】:

      • 您需要提供文件的路径而不是目录。您的 -o 选项缺少文件名。
      • 我很伤心,我不擅长 shell 脚本。不应该这样做$i = a/b/file.c` -> cc -o a/b/file a/b/file.c
      【解决方案4】:

      每次调用 cc 时都必须使用 -o 开关:

      cc -o path/to/my/file/a.out path/to/my/file/example.c
      

      或者你可以像这样制作一个包装脚本:

      mycc

      #!/bin/bash
      
      dirname=`dirname "$1"`
      #enquoted both input and output filenames to make it work with files that include spaces in their names.
      cmd="cc -o \"$dirname/a.out\" \"$1\""
      
      eval $cmd
      

      然后你可以调用

      ./mycc path/to/my/file/example.c
      

      它会依次调用

      cc -o "path/to/my/file/a.out" path/to/my/file/example.c
      

      当然你可以把 mycc 放在 $PATH 中,这样你就可以这样称呼它:

      mycc path/to/my/file/example.c
      

      【讨论】:

      • 这可以作为别名吗?
      • 您也可以将输出文件命名为 .c 文件,即 test.c -> test.out,如下所示:cc $1 -o $(dirname $1)/$(basename $1 .c).out"
      • @FUZxxl 你不能简单的别名 cc 来做到这一点,因为不幸的是你不能将参数传递给别名(我刚刚发现:))。
      • 好吧(很遗憾,我没有编写 shell 脚本的经验)。
      • 我编辑了上面的脚本来引用输入文件名和输出文件名。它现在应该适用于包含空格的文件名。
      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2015-07-30
      • 2019-02-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多