如何设置gcc以使用文件扩展名(.c或.cpp)来确定正确的编译器/链接器?

时间:2013-02-11 18:27:13

标签: c gcc

我有一个简单,有代表性的C程序,存储在一个名为hello.c的文件中:

#include <stdio.h>
int main(void)
{
    printf('Hello, world\n');
    return 0;
}

在我的Linux机器上,我试图用gcc编译程序:

gcc hello.c

返回错误:

undefined reference to "___gxx_personality_v0" ... etc

之前在C ++的上下文中有been discussed,当链接阶段,当gcc尝试将C库链接到C ++程序时,会出现此问题,从而产生错误。在one of the answers中,有人提到扩展确实很重要,并且gcc在编译C文件时需要.c扩展名,以及其他一些扩展名(例如.cpp)编译C ++文件时。

问题:如何设置gcc以使用文件扩展名来确定要使用哪个编译器,因为gcc似乎默认为我的系统上的C ++?仅通过文件扩展名指定语言似乎不够。如果我使用-x标志指定语言,gcc将按预期运行。

gcc -x c hello.c

1 个答案:

答案 0 :(得分:1)

通常,您让make决定这一点。

GNU Make内置了隐式规则,可自动选择合适的编译器。

尝试使用以下内容的Makefile:

all: some_file.o some_other_file.o

然后将some_file.cppsome_other_file.c放在同一目录中,gnu make将自动选择正确的编译器。链接器,您可能仍需要自己提供。混合C和C ++时,通常最容易与g ++链接,如下所示:

program.exe: some_file.o some_other_file.o
    g++ -o $@ @^

这与:

相同
program.exe: some_file.o some_other_file.o
    g++ -o program.exe some_file.o some_other_file.o