最近发现了一款有用的软件e4a(可以制作安卓程序),生成的原理是调用了编译器。很多人都觉得想做软件生成器就一定要制作编译器,其实恰恰相反,编译器太难制作了,连易语言都是调用了c语言(准确说是vc的编译器)来生成可执行程序。所以今天,就来跟大家科普一下如何调用编译器的知识(现在大部分用易语言做的语言都是采用调用编译器的方法)。
扯到这里,就不得不介绍一下GCC这个编译器了。
GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
![](https://imgsa.baidu.com/forum/w%3D580/sign=26524149ecc4b7453494b71efffc1e78/5110b7de9c82d158e0b89ed1870a19d8bc3e42b5.jpg)
所以,理论上调用gcc编译器采用c到自制语法到编译器的步骤就可以制作自己的编程语言(其实也不完全可以说是语言),原理其实是跟易语言相同的。
所以不得不说到c语言了。下面是一段c语言代码,大家来感受一下。
#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
编译效果是这样的。![](https://imgsa.baidu.com/forum/w%3D580/sign=8c370a498118367aad897fd51e728b68/1713344e251f95caedae55d6ce177f3e67095214.jpg)
那么我们怎么把这串代码用易语言来编译出来呢?
首先得设置一个环境变量。(这样才能调用gcc,当然,输入绝对地址也可以)
我的电脑-属性-高级-环境变量
![](https://imgsa.baidu.com/forum/w%3D580/sign=9c794a689c504fc2a25fb00dd5dce7f0/771a958fa0ec08fae26ad5c75eee3d6d55fbda06.jpg)
按照以下顺序来设置系统变量。
path
路径;记住要加分号
新建系统变量
include
路径
lib
路径
把
#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
保存为txt文本再把后缀改为c-注意是小c不是C(名字改为c ,最后的文件名为c.c),然后存入D盘(一定要最开始的D盘里面(别的盘也可以,但一定要最开始),不然没用,具体自己熟悉cmd命令)
点击开始,运行,输入cmd,输入d:按回车,再输入gcc c.c再回车,就生成了一个可执行程序。![](https://imgsa.baidu.com/forum/w%3D580/sign=6ad40ebdac64034f0fcdc20e9fc37980/dec689b1cb134954280c2804514e9258d1094a5d.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=a6228f9b0d46f21fc9345e5bc6256b31/2d52d51373f082022b47505f4cfbfbedaa641b96.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=2a118296a0efce1bea2bc8c29f50f3e8/d5e2b6fb43166d22f5b4d4f4412309f79152d2ad.jpg)
那个人c的图标不用管。最终生成的文件默认为a。
那么我们是否可以用易语言代替这个动作呢?当然。具体情况看以下图片。![](https://imgsa.baidu.com/forum/w%3D580/sign=d721b6466a224f4a5799731b39f69044/541e31fae6cd7b89fb8bfae3082442a7d8330e80.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=4e1a3c47783e6709be0045f70bc69fb8/130ab47eca806538e54b647390dda144ac3482c3.jpg)
注意,cmd的两个命令之间需要用&来连接。
尝试以下,是不是也生成了exe文件?那么下次,只要自己把c的代码转换成自己的编程语言就可以了,是不是很神奇?
表示楼主这么辛苦可不可以申精![](https://tb2.bdstatic.com/tb/editor/images/face/i_f24.png?t=20140803)
扯到这里,就不得不介绍一下GCC这个编译器了。
GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
![](https://imgsa.baidu.com/forum/w%3D580/sign=26524149ecc4b7453494b71efffc1e78/5110b7de9c82d158e0b89ed1870a19d8bc3e42b5.jpg)
所以,理论上调用gcc编译器采用c到自制语法到编译器的步骤就可以制作自己的编程语言(其实也不完全可以说是语言),原理其实是跟易语言相同的。
所以不得不说到c语言了。下面是一段c语言代码,大家来感受一下。
#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
编译效果是这样的。
![](https://imgsa.baidu.com/forum/w%3D580/sign=8c370a498118367aad897fd51e728b68/1713344e251f95caedae55d6ce177f3e67095214.jpg)
那么我们怎么把这串代码用易语言来编译出来呢?
首先得设置一个环境变量。(这样才能调用gcc,当然,输入绝对地址也可以)
我的电脑-属性-高级-环境变量
![](https://imgsa.baidu.com/forum/w%3D580/sign=9c794a689c504fc2a25fb00dd5dce7f0/771a958fa0ec08fae26ad5c75eee3d6d55fbda06.jpg)
按照以下顺序来设置系统变量。
path
路径;记住要加分号
新建系统变量
include
路径
lib
路径
把
#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
保存为txt文本再把后缀改为c-注意是小c不是C(名字改为c ,最后的文件名为c.c),然后存入D盘(一定要最开始的D盘里面(别的盘也可以,但一定要最开始),不然没用,具体自己熟悉cmd命令)
点击开始,运行,输入cmd,输入d:按回车,再输入gcc c.c再回车,就生成了一个可执行程序。
![](https://imgsa.baidu.com/forum/w%3D580/sign=6ad40ebdac64034f0fcdc20e9fc37980/dec689b1cb134954280c2804514e9258d1094a5d.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=a6228f9b0d46f21fc9345e5bc6256b31/2d52d51373f082022b47505f4cfbfbedaa641b96.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=2a118296a0efce1bea2bc8c29f50f3e8/d5e2b6fb43166d22f5b4d4f4412309f79152d2ad.jpg)
那个人c的图标不用管。最终生成的文件默认为a。
那么我们是否可以用易语言代替这个动作呢?当然。具体情况看以下图片。
![](https://imgsa.baidu.com/forum/w%3D580/sign=d721b6466a224f4a5799731b39f69044/541e31fae6cd7b89fb8bfae3082442a7d8330e80.jpg)
![](https://imgsa.baidu.com/forum/w%3D580/sign=4e1a3c47783e6709be0045f70bc69fb8/130ab47eca806538e54b647390dda144ac3482c3.jpg)
注意,cmd的两个命令之间需要用&来连接。
尝试以下,是不是也生成了exe文件?那么下次,只要自己把c的代码转换成自己的编程语言就可以了,是不是很神奇?
表示楼主这么辛苦可不可以申精
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f24.png?t=20140803)