GNU C编译器不适用于OSX的QT Creator

时间:2019-06-25 17:17:16

标签: qt gcc clang

我通过gcc在OSX上安装了brew。我需要使用gcc而不是clang来执行clang不支持的特定命令。在shell屏幕中,gcc example.c命令使用clang编译example.c代码,而gcc-9 example.c命令使用原始gcc(GNU C编译器)编译代码。

在QT中,我需要使用pipe()函数来获取GCC命令的输出。如果将带有gcc的命令字符串放入管道函数,则会产生错误,因为clang不支持我一开始提到的特定命令。如果我在管道函数中输入了带有gcc-9的命令,则这次QT会给出类似“ gcc-9:找不到”的错误。

为什么gcc-9命令在外壳屏幕上有效,但在QT中不起作用?如何在QT中使用gcc-9命令?

代码段如下:

std::string removeComments(const std::string &path)
{
    std::array <char, 256> buffer;
    std::string result, cmd = "gcc-9 -fpreprocessed -dD -E '" + path + "'";
    std::unique_ptr <FILE, decltype(&pclose)> pipe(popen(cmd.c_str(), "r"), pclose);

    if (!pipe)
        throw std::runtime_error("popen() failed!");

    fgets(buffer.data(), buffer.size(), pipe.get());

    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr)
        if (!skipLine(buffer.data()))
            result += buffer.data();

    return result;
}

1 个答案:

答案 0 :(得分:1)

您用来编译代码的编译器与您试图从代码中调用 的编译器无关。 IDE中的所有编译器设置都不相关。为避免混淆,请将它们恢复为默认值。

您需要

  1. 设置您的PATH环境变量,使其包含/usr/local/bin,并且外壳程序可以找到命令gcc-9;或
  2. 使用完整路径,例如"/usr/local/bin/gcc-9"