Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a557c1b

Browse files
committed
Write the compile command section
1 parent 6d19bbc commit a557c1b

6 files changed

+77
-9
lines changed

src/SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@
2727
- [Rustツールチェインのインストール](./atcoder-env/installing-rust-toolchain.md)
2828
- [クレートのコンパイルとインストール](./atcoder-env/installing-rust-crates.md)
2929
- [クレート検索パス生成ツールのインストール](./atcoder-env/installing-rustc-dep-option-generator.md))
30-
- [コンパイルコマンドと実行コマンド (TODO)](./atcoder-env/compiling-and-running-program.md)
30+
- [コンパイルコマンドと実行コマンド](./atcoder-env/compiling-and-running-program.md)
3131
- [コントリビュータ (TODO)](./contributors.md)

src/atcoder-env/compiling-and-running-program.md

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,77 @@
22

33
# コンパイルコマンドと実行コマンド
44

5-
**TODO** このページは書きかけです
5+
このページではジャッジサーバでユーザプログラムをコンパイルし、実行するためのコマンドを説明します
66

77

8-
## コンパイルオプションについて
8+
## ファイルレイアウトとコンパイルの流れ
9+
10+
選手がRustプログラムを提出すると、その内容がジャッジサーバ上のファイルシステムに書き出されます。
11+
ジャッジサーバがどのような設計になっているかわからないので、ここでは仮にLinuxユーザのホームディレクトリ配下に`WORKAREA`という作業用の一時ディレクトリができるものとします。
12+
13+
Rustプログラムは`WORKAREA``main.rs`に書き出すようにジャッジサーバを設定してください。
14+
15+
```console
16+
$HOME # ユーザのホームディレクトリ
17+
└-- WORKAREA # ジャッジ用の一時ディレクトリ
18+
└-- main.rs # ユーザプログラム(提出されたプログラム)のソースコード
19+
```
20+
21+
`WORKAREA``cd`で移動して、後述のコンパイルコマンドを実行します。
22+
すると以下のことが行われ`main`という名の実行可能ファイル(バイナリ)が生成されます。
23+
24+
1. プログラムがアセンブリコードに変換されオブジェクトファイルが作られる
25+
1. オブジェクトファイルがRustの標準ライブラリや`${RUST_MOME}/lib/target/release/deps`配下に作成しておいた`rlib`とリンクされる
26+
27+
```console
28+
$HOME
29+
└-- WORKAREA
30+
|-- main.rs
31+
└-- main # コンパイルとリンクの成果物。実行可能ファイル(バイナリ)
32+
```
33+
34+
35+
## コンパイルコマンド
36+
37+
ツールチェインのインストールのページで説明したように、コンパイルを実行するシェルに以下の環境変数が設定されている必要があります。
38+
39+
```console
40+
$ echo $RUST_HOME
41+
/usr/local/lib/rust
42+
43+
$ echo $RUSTUP_HOME
44+
/usr/local/lib/rust/rustup
45+
46+
$ echo $CARGO_HOME
47+
/usr/local/lib/rust/cargo
48+
49+
$ echo $PATH
50+
... /usr/local/lib/rust/cargo/bin; ...
51+
```
52+
53+
コンパイルコマンドは以下のとおりです。
54+
55+
```console
56+
$ cd ${HOME}/WORKAREA
57+
$ RUST_LIB=${RUST_HOME}/lib
58+
$ rustc --edition=2018 -C opt-level=3 \
59+
$(rustc-dep-option-generator ${RUST_LIB}/Cargo.toml ${RUST_LIB}/target/release/deps) \
60+
main.rs
61+
```
62+
63+
これにより`${HOME}/WORKAREA`ディレクトリに`main`という名のバイナリが生成されます。
64+
65+
66+
### コンパイルオプションについて
967

1068
**TODO**
69+
70+
71+
## 実行コマンド
72+
73+
バイナリを実行するコマンドは以下のとおりです。
74+
75+
```console
76+
$ cd ${HOME}/WORKAREA
77+
$ ./main < 入力データファイル
78+
```

src/atcoder-env/installing-rust-crates.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# クレートのコンパイルとインストール
44

5-
本ページではAtCoderのジャッジサーバにRustの外部ライブラリであるクレートをインストールする手順を説明します
5+
このページではAtCoderのジャッジサーバにRustの外部ライブラリであるクレートをインストールする手順を説明します
66

77

88
## インストールするクレートについて
@@ -82,7 +82,7 @@ $RUST_HOME (/usr/local/lib/rust)
8282

8383
そしてジャッジの際には、`cargo`を使用せず、`rustc`に適切なオプション(ライブラリ検索パスなど)を与えて実行することで、事前にコンパイルしておいた`rlib`ファイルとリンクさせます。
8484

85-
**AtCoderジャッジサーバでのファイルレイアウト(ジャッジの際に作成する**
85+
**AtCoderジャッジサーバでのファイルレイアウト(ジャッジの際に作成するもの**
8686

8787
```console
8888
$HOME # ユーザのホームディレクトリ

src/atcoder-env/installing-rust-toolchain.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Rustツールチェインのインストール
44

5-
本ページではAtCoderのジャッジサーバにRustツールチェインをインストールする手順を説明します
5+
このページではAtCoderのジャッジサーバにRustツールチェインをインストールする手順を説明します
66

77

88
## Rustバージョン

src/atcoder-env/installing-rustc-dep-option-generator.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
> ジャッジの際には、`cargo`を使用せず、`rustc`に適切なオプション(ライブラリ検索パスなど)を与えて実行することで、事前にコンパイルしておいた`rlib`ファイルとリンクさせます。
88
9-
本ページではこの`rustc`のコマンドライン・オプションを生成するツールである`rustc-dep-option-generator`のインストール手順を説明します。
9+
このページでは`rustc`のコマンドライン・オプションを生成するツールである`rustc-dep-option-generator`のインストール手順を説明します。
1010
このツールはRustで書かれています。
1111

1212

@@ -68,7 +68,7 @@ $ which rustc-dep-option-generator
6868
$ echo $RUST_HOME
6969
/usr/local/lib/rust
7070

71-
$ export RUST_LIB=${RUST_HOME}/lib
71+
$ RUST_LIB=${RUST_HOME}/lib
7272
$ rustc-dep-option-generator ${RUST_LIB}/Cargo.toml ${RUST_LIB}/target/release/deps
7373
--extern arrayvec=/usr/local/lib/rust/lib/target/release/deps/libarrayvec-cc9c39e9e371e142.rlib
7474
--extern hashbrown=/usr/local/lib/rust/lib/target/release/deps/libhashbrown-106405935e6124e3.rlib

src/atcoder-env/supported-environment.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## 用語
88

9-
本章で用いる用語には以下のものがあります。
9+
まずは用語の整理です。本章で用いる用語には以下のものがあります。
1010

1111
- **ユーザプログラム**
1212
- 選手が提出したプログラムのこと

0 commit comments

Comments
 (0)