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

Mar*_*ark 2 gcc g++

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

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

Tho*_*key 7

这通常是通过 makefile 规则完成的,例如, given test.c,您将能够执行此操作(即使没有makefile):

make test
Run Code Online (Sandbox Code Playgroud)

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

make test2
Run Code Online (Sandbox Code Playgroud)

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

gcc 本身没有模拟生成文件规则的选项。如果你想要一个工具来做到这一点,你可以制作一个 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
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Mark 不,你没有。`make` 有默认规则。如果你有一个文件`widget.c`,那么试试`make widget`。您甚至可以通过在环境变量 `LDLIBS` 中指定它们来指定要包含在链接阶段的默认库集(例如 `export LDLIBS='-lm -lterminfo'`) (2认同)