在 c++ 源代码中调用 g++
Calling g++ in c++ source code
所以我已经搜索了我能拥有的一切。我正在使用C++编写自己的IDE,并且正在尝试找到一种调用g ++或任何其他编译器的方法。到目前为止,我想到的唯一方法是这样的:
int main(){
system("g++ --flags");
return 0;
}
你们知道或能想到任何其他方法在 c++ 中做到这一点吗?
此致敬意泽·佩德罗
最"原始"的方式是使用操作系统的API:POSIX上的exec()
系列,CreateProcess[Ex]
Windows上的API。
通常,您也可以通过独立于平台的抽象来使用它。您用于 GUI 的工具包(无论它是什么(很可能已经具有进程启动功能作为其 API 的一部分。例如,Qt有QProcess
,wxWidgets有wxExecute()
。
如果您尝试保留命令的输出,则应使用 popen。 它的使用类似于打开文件,也可以这样使用
FILE *compiler = popen("g++ --flags", "r");
然后使用 fgets
、 fscanf
等stdio
命令。 如果您的目标是 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';
}
你的方式会很好用。 如果您有兴趣,这里有一些其他方法可以做到这一点:如何在c ++程序中调用.exe文件?
系统函数调用是阻塞调用。如果我的理解正确,它通常会等待呼叫返回。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用