我通过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;
}
答案 0 :(得分:1)
您用来编译代码的编译器与您试图从代码中调用 的编译器无关。 IDE中的所有编译器设置都不相关。为避免混淆,请将它们恢复为默认值。
您需要
PATH
环境变量,使其包含/usr/local/bin
,并且外壳程序可以找到命令gcc-9
;或"/usr/local/bin/gcc-9"