我可以将 gcc 配置为始终输出到代码文件的名称而不是 a.exe 吗?

我可以将 gcc 配置为始终输出到代码文件的名称而不是 a.exe 吗?

默认情况下,运行时gcc test.c,gcc 会将可执行文件输出为a.exe.有没有办法全局覆盖这个以便 gcc 创建test.exe

这假设只有一个输入文件 - 否则 gcc 可以选择使用 a.exe,或者可能使用第一个文件的名称。

答案1

这通常是通过 makefile 规则完成的,例如,给定test.c,你将能够做到这一点(甚至没有有一个 makefile):

make test

同样,g++ 有预定义的规则,给定test2.cc,你可以做同样的事情:

make test2

但无论哪种情况,您可能都需要库。这样做就是 makefile 的好处(除了提供编译多个对象的方法之外)。

gcc 本身没有模拟 makefile 规则的选项。如果你想要一个可以做到这一点的工具,你可以制作一个 shell 脚本来执行提到的特殊情况,例如,

#!/bin/sh
for name in "$@"
do
    case "$name" in
    *.c)
        gcc -o $(basename "$name") "$name"
        ;;
    *.cc)
        g++ -o $(basename "$name") "$name"
        ;;
    *)
        echo "ignoring $name, since it is not one of my files!"
        ;;
    esac
done

但是(请参阅答案的开头),脚本只是明确了预定义规则为您提供的功能make。另一方面,你可以修改脚本以添加必要的库,并在一个地方执行此操作(而不是一组 makefile,这似乎是问题所在)。

顺便说一句:gcc 是否自动提供“.exe”后缀(如果不提供)取决于平台和编译器配置。该后缀在类 Unix 平台上没有用,并且在 Cygwin 等相关平台上通常是可选的。

答案2

我无法找到一种方法让 gcc 创建二进制文件并使用默认编译的 .c 文件的名称。然而,这是我创建的一个快速 bash 脚本,我运行它而不是 gcc:

#!/bin/bash
temp=${1##*/}; output=${temp%.c}
gcc $1 -o $output $2

不相关的是,我扩展了脚本以默认使用名称进行编译,并在文件存在时执行该二进制文件。我确信这可以更好地调整,就像存在具有该名称的文件一样,它将始终运行,但它适合我的目的。

#!/bin/bash

temp=${1##*/}; output=${temp%.c}

gcc $1 -o $output $2

if [ -f $output ]; then
    echo "==== $output being run ===="
    ./$output
fi

相关内容