如何以编程方式请求编译器以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; }
或者任何适合你正在使用的编译器的命令。