如何以编程方式请求编译器以C ++编译文件?

以下是我的C ++程序:

main.cpp中

#include <iostream> #include <fstream> using namespace std; int main() { ofstream fileWriter; fileWriter.open ("firstFile.cpp"); fileWriter << "#include <iostream>" << endl; fileWriter << "int main() {" << endl; fileWriter << "\tstd::cout << \"hello world\" << std::endl;" << endl; fileWriter << "\treturn 0;" << endl; fileWriter << "}" << endl; fileWriter.close(); return 0; } 

当上述程序执行时,它会创build一个名为“firstFile.cpp”的文本文件,其中包含以下代码:

firstFile.cpp

 #include <iostream> int main() { std::cout << "hello world" << std::endl; return 0; } 

当执行时,在屏幕上打印“hello world”。

所以,我想添加到main.cpp文件的代码行要求GCC编译刚刚创build的新的firstFile.cpp

我在Ubuntu和Windows平台上都使用GNU gcc。

是否有可能从调用编译器的任何错误代码? 如果不是为什么。

使用std :: system命令不会太困难。 原始string文字也允许我们插入多行文本 ,这对于input程序部分很有用:

 #include <cstdlib> #include <fstream> // Use raw string literal for easy coding auto prog = R"~( #include <iostream> int main() { std::cout << "Hello World!" << '\n'; } )~"; // raw string literal stops here int main() { // save program to disk std::ofstream("prog.cpp") << prog; std::system("g++ -o prog prog.cpp"); // compile std::system("./prog"); // run } 

输出:

 Hello World! 

您只需在创build文件后添加以下行即可。

 system("g++ firstFile.cpp -o hello"); 

在OS X上工作,所以我希望它也能为你工作。

gcc是一个可执行文件,所以你必须使用system("gcc myfile.cpp")或者popen("gcc myfile.cpp") ,这会给你一个文件stream。

但是,由于您正在生成代码,您甚至不需要将其写入文件。 你可以用FILE* f = popen("gcc -x ++ <whatever flags>")打开gcc程序。 然后你可以用fwrite(f, "<c++ code>")写你的coe。 我知道这是c而不是真的c++但它可能是有用的。 (我不认为有一个c++版本的popen() )。

在源文件中使用编译器的命令行使用系统函数。

其语法是:

 int system (const char* command); //built in function of g++ compiler. 

在你的情况下,应该是这样的

 system("g++ firstFile.cpp"); 

PS:系统函数不会抛出exception。

程序

 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main() { ofstream fileWriter; fileWriter.open ("firstFile.cpp"); fileWriter << "#include <iostream>" << endl; fileWriter << "int main() {" << endl; fileWriter << "\tstd::cout << \"hello world\" << std::endl;" << endl; fileWriter << "\treturn 0;" << endl; fileWriter << "}" << endl; fileWriter.close(); system("g++ firstFile.cpp"); return 0; } 

根据你实际想要达到的目标,你也可以考虑在应用程序中embedded一些C ++编译器。

请注意,这远不像调用外部可执行文件那么简单,并且可能受到许可限制(GPL)的限制。

另外请注意,通过使用std::system或类似的机制,您可以在目标环境中添加要求,以实际上使被调用的编译器可用(除非以某种方式将其与应用程序捆绑在一起)。

像这样的东西:

 #include <iostream> #include <fstream> using namespace std; int main() { ofstream fileWriter; fileWriter.open ("firstFile.cpp"); fileWriter << "#include <iostream>" << endl; fileWriter << "int main() {" << endl; fileWriter << "\tstd::cout << \"hello world\" << std::endl;" << endl; fileWriter << "\treturn 0;" << endl; fileWriter << "}" << endl; fileWriter.close(); system("c firstFile.cpp"); return 0; } 

或者任何适合你正在使用的编译器的命令。