【发布时间】:2019-06-25 17:17:16
【问题描述】:
我通过brew 在 OSX 上安装了gcc。对于 clang 不支持的特定命令,我需要使用 gcc 而不是 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: not found”的错误。
为什么gcc-9 命令在shell 屏幕上有效,而在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;
}
【问题讨论】:
-
你是如何在你正在使用的 Qt Creator “工具包”中配置 gcc-9 的?错误表明它可能只是没有找到,你的 shell 可能在 PATH 中有它,而 Qt creator 可能有不是。
-
@FrankOsterfeld 屏幕截图在这里:i.imgur.com/kFzrkWW.png 我将“Linux ICC”的路径设置为安装 gcc-9 的“/usr/local/bin/gcc-9”。但它仍然无法正常工作。
-
"clang不支持我开头提到的具体命令"什么命令?
-
ICC 不是 GCC,Linux 不是 Mac OS。
-
@n.m.它是
gcc -fpreprocessed,我用它从 C 源文件中删除 cmets。 ICC不只是编译器的名称吗?我将ICC的路径设置为gcc-9的路径。这是截图:i.imgur.com/yNWTCc1.png(对不起,我以前从未使用过 OSX,我现在正在使用 Hackintosh。所以我不知道 ICC 是什么。)