常见编程语言 -- 如何在命令行编译并运行
目录
有时通过 jetbrains、vscode 这些 ide 的界面操作来运行项目,反而不懂简单的命令。绝大部分编程语言都有在命令行编译并运行方式的功能,有悟收集当前一些主流开发语言(java、go、c/c++、javascript/typescript、rust)的命令行编译并运行的命令。
- 环境准备
安装
oracle java sdk
,或者
oracle open jdk
,然后将
java
可执行程序所在程序配置到 $PATH (windows用户配置到 %path%)。
java open jdk 有非常多的版本,可通过 jabba 安装,版本非常全。 windows 用户安装了 scoop 的,可以使用 scoop 来安装,使用
scoop search jdk
会提示相应的步骤 macos/linux 用户还可以使用 jenv 来管理多版本。
- hello world 程序:
// hello.java
class Hello {
public static void main(String[] args){
System.out.println("I'm a Simple Program");
}
}
编译与运行(命令 javac hello.java && java Hello
):
~/Projects/go/examples/firstprogram
➜ javac hello.java && java Hello
youwu.today say hi.
javac hello.java
会编译并在当前生成一个字节码文件 Hello.class。使用 java Hello
启动 java 程序,Hello
是 main 类的名称。
常见的以 java 为开发语言的项目,使用 gradle、maven 等构建工具来完成构建,并不会直接手动在命令行执行
javac
。
- 环境准备
到官方网站
下载页
下载 sdk,按照官方
安装说明
进行安装。如果下载的是 zip 压缩包版本,需要将 go
可执行程序所在程序配置到环境变量 path。
windows 用户可以使用 scoop 来安装 go sdk。 macos/linux 用户可以使用 brew 安装。
- hello world 程序:
// hello.go
package main
import "fmt"
func main() {
fmt.Println("youwu.today say hi.")
}
使用 go run hello.go
运行或者 go build -o hello_go hello.go && ./hello_go
编译生成可执行程序后运行:
~/Projects/go/examples/firstprogram
➜ go run hello.go
youwu.today say hi.
~/Projects/go/examples/firstprogram
➜ go build -o hello_go hello.go && ./hello_go
youwu.today say hi.
- 安装 c 编译环境 gcc
linux 用户安装 gcc环境,通过所用操作系统的包管理器安装。 windows 用户,安装 mingw ,如果是 windows 10用户,可以启用 wls 来获得一个 linux 操作系统环境。 macos 用户安装 xcode ,当然也你可以选择安装 gcc,不过如果你以后可能会在 macos 上搞程序开发工作,那么还是安装 xcode。
还有一些定制的c编译器,如 tinyc,作用新手的话,不建议去玩。
- hello world 程序:
// hello.c
#include <stdio.h>
int main() {
printf("youwu.today say hi.\n");
return 0;
}
使用命令 gcc hello.c -o hello_c && hello_c
编译并生成可执行程序 hello_c
:
~/Projects/go/examples/firstprogram
➜ gcc hello.c -o hello_c && ./hello_c
youwu.today say hi.
~/Projects/go/examples/firstprogram
➜ clang hello.c -o hello_c && ./hello_c
~/Projects/go/examples/firstprogram
➜ g++ hello.c -o hello_c && ./hello_c
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
youwu.today say hi.
即使使用 c++ 编译器,也可以编译上面的示例程序,当然会有一些警告信息。
- 安装 c++ 编译环境
gcc 环境中包含有 c++ 编译器。
- hello world 程序:
// hello.cpp
#include <iostream>
using namespace std;
int main ()
{
cout << "youwu.today say hi." << endl;
return 0;
}
使用命令 g++
或 c++
编译并生成可执行程序 hello_cpp
:
~/Projects/go/examples/firstprogram
➜ g++ hello.cpp -o hello_cpp && ./hello_cpp
youwu.today say hi.
~/Projects/go/examples/firstprogram
➜ c++ hello.cpp -o hello_cpp && ./hello_cpp
youwu.today say hi.
typescript 是用来开发 javascript 的,不是用来直接运行的。不过,还是可以在命令行运行。
如果使用 nodejs 作为 js 运行环境,那么需要安装 typescript 编译器。通过使用 typescript 编译得到 js 脚本后再用 nodejs 来运行。
除 nodejs 外,javascript 还有一个不错的服务端运行时环境, deno ,它可以直接运行 typescript,可按 官方说明 安装。
有需要安装nodejs的,可到 官方网站 下载。或者使用 scoop/brew 安装,还可以使用 nodejs 多版本管理器 nvm (如 windows 版本 / macos、linux版本 )安装。
typescript, 官方下载页 中有说明,通过
npm
、yarn
等 js 工程的包管理器来安装。
- hello world 程序:
// hello.ts
function main() {
console.log("youwu.today say hi.")
}
main()
使用 typescript + node 运行的方式:
~/Projects/go/examples/firstprogram
➜ tsc hello.ts && node hello.js
youwu.today say hi.
tsc
是 typescript 的命令行 cli,通过它将 hello.ts 编译成 hello.js,然后使用 node
运行 hello.js 脚本。
使用 deno 直接运行 typescript 脚本文件:
~/Projects/go/examples/firstprogram
➜ deno run hello.ts
Check file:///Users/youwu.today/Projects/go/examples/firstprogram/hello.ts
youwu.today say hi.
~/Projects/go/examples/firstprogram
➜ deno run hello.ts
youwu.today say hi.
第一次运行会出现 Check file:///...
,这是 deno 编译 typescript 文件。
- 环境准备
建议通过 rustup 来安装 rust 环境,rustup 是由官方提供的安装、更新工具。安装后需要将相关的路径配置到 PATH 环境变量中。详见 官方的 安装说明 。当然,还是可以通过 scoop、brew 来安装。
- hello world 程序:
// hello.rs
fn main() {
println!("youwu.today say hi.");
}
使用 rustc
来编译代码,会在当前目录下生成一个可执行文件,通过 -o 名称
来指定个可执行程序的名称:
~/Projects/go/examples/firstprogram
➜ rustc hello.rs -o hello_rs && ./hello_rs
youwu.today say hi.
通常,我们见到的使用 rust 所开发的项目,都是通过 cargo
来启动编译,而不会直接启动 rustc
编译。
cargo 之于 rust,如同 gradle/maven 之于 java,npm/yarn 之于 js。
顺便看看编译后可执行文件的大小(好奇) #
~/Projects/go/examples/firstprogram
➜ ls -lrS
total 4792
-rw-r--r-- 1 zhangying staff 51 8 24 11:07 hello.rs
-rw-r--r-- 1 zhangying staff 77 8 24 10:56 hello.ts
-rw-r--r-- 1 zhangying staff 80 8 24 10:53 hello.js
-rw-r--r-- 1 zhangying staff 81 8 24 10:02 hello.go
-rw-r--r-- 1 zhangying staff 83 8 24 10:18 hello.c
-rw-r--r-- 1 zhangying staff 122 8 24 09:58 hello.java
-rw-r--r-- 1 zhangying staff 129 8 24 10:30 hello.cpp
-rw-r--r-- 1 zhangying staff 423 9 15 10:36 Hello.class
-rwxr-xr-x 1 zhangying staff 49424 9 15 10:44 hello_c
-rwxr-xr-x 1 zhangying staff 56120 9 15 10:59 hello_cpp
-rwxr-xr-x 1 zhangying staff 437816 9 15 10:58 hello_rs
-rwxr-xr-x 1 zhangying staff 1869456 9 15 10:42 hello_go
以上所列可执行程序(hello_c、hello_cpp、hello_go、hello_rs),是在 macos 11.5.1 上编译得到的。
当然,编译过程都是编译器默认的优化参数。
hello world 的各个可执行程序中,c版本的体积最小。(java 的 class 文件不算,它不是可执行程序,而只是字节码,需要在 java 虚拟机中运行。)
~/Projects/go/examples/firstprogram
➜ go version
go version go1.17 darwin/amd64
~/Projects/go/examples/firstprogram
➜ rustc --version
rustc 1.55.0 (c8dfcfe04 2021-09-06)
~/Projects/go/examples/firstprogram
➜ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
~/Projects/go/examples/firstprogram
➜ clang --version
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
语言 | 编译器 | 可执行程序大小 |
---|---|---|
c | apple clang 12.0.5 | 48 kb |
cpp | apple clang 12.0.5 | 55 kb |
rust | 1.55.0 | 408 kb |
go | 1.17 | 1.8 mb |