在c ++源代码中调用g ++

时间:2013-12-05 20:04:35

标签: c++ compiler-construction ide

所以我已经搜索了所有可能的东西。我正在使用C ++编写自己的IDE,我正试图找到一种方法来调用g ++或任何其他编译器。到目前为止我唯一想到的方法就是这样:

int main(){
   system("g++ --flags");
   return 0;
}

你们是否知道或者可以想到用c ++做其他任何方法?

祝你好运, ZéPedro

4 个答案:

答案 0 :(得分:2)

最“原始”的方式是使用您的操作系统API:POSIX上的exec() family,Windows上的CreateProcess[Ex]

通常,您也可以通过独立于平台的抽象来使用它。很可能你用于GUI的工具包(无论它是什么)已经将流程启动功能作为其API的一部分。例如,Qt有QProcess,wxWidgets有wxExecute()

答案 1 :(得分:2)

如果您尝试保留命令的输出,则应使用popen。它的用法类似于打开一个文件,它也可以这样使用

FILE *compiler = popen("g++ --flags", "r");

然后使用fgetsfscanfstdio命令。如果您的目标是linux,这将有用。 这是一个(相当)更完整的例子

#include <cstdio>
#include <iostream>

int main() {
    FILE *compiler = popen("g++ -Wall f.cpp -std=c++11", "r");
    char c;
    while (( c = std::fgetc(compiler)) != EOF) {
        std::cout << c;
    }
    std::cout << '\n';
}

答案 2 :(得分:1)

你的方式会很好。如果您有兴趣,可以采取以下其他方法:how to call .exe file within c++ program?

答案 3 :(得分:0)

系统函数调用是阻塞调用。如果我的理解是正确的,它通常会等待回电。