-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathusing.xml
More file actions
2073 lines (1716 loc) · 125 KB
/
using.xml
File metadata and controls
2073 lines (1716 loc) · 125 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<chapter id="using-ghc">
<title>GHCを使う</title>
<indexterm><primary>GHC, using</primary></indexterm>
<indexterm><primary>using GHC</primary></indexterm>
<sect1>
<title>始めてみよう: プログラムをコンパイルする</title>
<para>この章には、GHCのコマンド行構文の完全なリファレンスが、400以上のフラグも含めて書かれている。これは大きくて複雑なシステムであり、大量の詳細があるので、どこから始めれば良いのかかなり分かりにくいかもしれない。これを踏まえて、ここに入門的な節がある。以降の節で完全な構文に飛び込む前に、この節はHaskellプログラムをコンパイルするためのGHCの基本的な使い方について簡単な導入を提供する。</para>
<para>Hallo Worldプログラムを作ってコンパイルし、実行してみよう。まず、以下のHaskellコードを含む<filename>hello.hs</filename>というファイルを作る。
</para>
<programlisting>
main = putStrLn "Hello, World!"
</programlisting>
<para>このプログラムをコンパイルするには、次のようにGHCを使う。</para>
<screen>
$ ghc hello.hs
</screen>
<para>(ここで<literal>$</literal>はプロンプトを表す。これを入力しないように)。GHCは<filename>hello.hs</filename>というソースファイルをコンパイルし、<filename>hello.o</filename>という<firstterm>オブジェクトファイル</firstterm>と<firstterm>hello.hi</firstterm>という<firstterm>インタフェースファイル</firstterm>を生成する。次にこのオブジェクトファイルをGHC付属のライブラリとリンクし、Unix/Linux/Macなら<filename>hello</filename>、Windowsなら<filename>hello.exe</filename>という実行ファイルを作成する。</para>
<para>デフォルトでは、GHCは自身の動作に関して寡黙であり、表示するのはエラーメッセージだけである。裏で何が行われているかを見たいなら、コマンド行に<option>-v</option>を追加すれば良い。
</para>
<para>その後、次のようにしてプログラムを実行できる。
</para>
<screen>
$ ./hello
Hello World!
</screen>
<para>プログラムが複数のモジュールに分かれている場合、GHCには<filename>Main</filename>モジュールが置かれているソースファイル名を教えてやれば十分である。そうすると、GHCは<literal>import</literal>宣言を分析して、プログラムを構成する他のモジュールを見付け、そのソースファイルを見付ける。これは、<literal>Main</literal>を除いて、全てのソースファイルは、その中身のモジュール名に従って名付けられなけばいけない(ドットはディレクトリ区切りに変換して)ということである。例えば、<literal>Data.Person</literal>というモジュールは、Unix/Linux/Macでは<filename>Data/Person.hs</filename>というファイルに、Windowsでは<filename>Data\Person.hs</filename>に、それぞれ置かれることになる。
</para>
</sect1>
<sect1>
<title>オプション概観</title>
<para>GHCの振る舞いは<firstterm>オプション</firstterm>で制御される。歴史的な理由から、これはコマンド行フラグとか引数とも呼ばれる。オプションを指定する方法は次の三つである。</para>
<sect2>
<title>コマンド行引数</title>
<indexterm><primary>structure, command-line</primary></indexterm>
<indexterm><primary>command-line</primary><secondary>arguments</secondary></indexterm>
<indexterm><primary>arguments</primary><secondary>command-line</secondary></indexterm>
<para>GHCを起動するときは次のような形をとる。</para>
<screen>
ghc [argument...]
</screen>
<para>コマンド行引数はオプションかファイル名のどちらかである。</para>
<para>コマンド行オプションは<literal>-</literal>ではじまる。これをひとまとめにすることはできない。つまり、<option>-vO</option>は<option>-v -O</option>とは異なる。オプションがファイル名より先に置かれる必要はない。例えば、<literal>ghc *.o -o foo</literal>のようにである。まず全てのオプションが処理され、全てのファイルに適用される。そのため、例えば<literal>ghc -c -O1 Foo.hs -O2 Bar.hs</literal>として<filename>Foo.hs</filename>と<filename>Bar.hs</filename>に異なる最適化水準を適用するということはできない。</para>
</sect2>
<sect2 id="source-file-options">
<title>ソースファイル中のコマンド行オプション</title>
<indexterm><primary>source-file options</primary></indexterm>
<para>ソースファイルと、それが必要とするコマンド行オプションの結合をとても強くした方が便利なことがある。例えば、あるHaskellソースファイルが意図的に名前の覆い隠しを使っているなら、それは<option>-fno-warn-name-shadowing</option>オプション付きでコンパイルされるべきである。<filename>Makefile</filename>でファイルごとのオプションの一覧を管理する代わりに、<literal>OPTIONS_GHC</literal>プラグマを使ってソースファイルに直接これを書き込むこともできる。<indexterm><primary>OPTIONS_GHC pragma</primary></indexterm></para>
<programlisting>
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module X where
...
</programlisting>
<para><literal>OPTIONS_GHC</literal>は<emphasis>ファイルヘッダプラグマ</emphasis>である(<xref linkend="pragmas"/>を見よ)。</para>
<para><literal>OPTIONS_GHC</literal>の中で使えるのは<emphasis>動的な</emphasis>フラグだけである(<xref linkend="static-dynamic-flags"/>を見よ)</para>
<para>ソースファイル中のオプションはコマンドシェルには渡されず、コンパイラが内部的に管理するコマンド行引数の配列に加えられるだけだということに注意せよ。そのため、<literal>OPTIONS_GHC</literal>の中でワイルドカードなどを使おうとすると猛烈にがっかりすることになるだろう。</para>
<para>注意: OPTIONS_GHCの内容はコマンド行オプションの後に連結されるので、ソースファイルで与えられたオプションはコマンド行から与えられたものよりも優先される。</para>
<para>Makefileの内容を全てソースファイルに移すのは推奨されないが、場合によっては<literal>OPTIONS_GHC</literal>プラグマを使うのが「正しい方法」である。(<option>-keep-hc-file</option>を使っていて、モジュールにOPTIONフラグがあるなら、生成された.hcファイルにOPTIONS_GHCが置かれる)</para>
</sect2>
<sect2>
<title>GHCiからオプションを設定する</title>
<para>GHCiの中から<literal>:set</literal>コマンドを使ってオプションを変更することもできる。詳しくは<xref linkend="ghci-set"/>を見よ。</para>
</sect2>
</sect1>
<sect1 id="static-dynamic-flags">
<title>静的オプション、動的オプション、モード指定オプション</title>
<indexterm><primary>static</primary><secondary>options</secondary>
</indexterm>
<indexterm><primary>dynamic</primary><secondary>options</secondary>
</indexterm>
<indexterm><primary>mode</primary><secondary>options</secondary>
</indexterm>
<para>GHCのコマンド行引数は<firstterm>静的オプション</firstterm>か、<firstterm>動的オプション</firstterm>か、<firstterm>モード指定オプション</firstterm>に分類される。</para>
<variablelist>
<varlistentry>
<term>モード指定フラグ</term>
<listitem>
<para>例えば<option>--make</option>や<option>-E</option>がこれである。モード指定フラグはコマンド行から一つだけ指定しても良い。利用可能なモードの一覧は<xref linkend="modes"/>にある。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>動的フラグ</term>
<listitem>
<para>モード指定フラグ以外の大部分のフラグはこれに分類される。動的なフラグはコマンド行で使っても良いし、ソースファイルの<literal>OPTIONS_GHC</literal>プラグマで使っても良いし、GHCiで<literal>:set</literal>を使って設定しても良い。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>静的フラグ</term>
<listitem>
<para>「静的な」フラグも少しある。これは、コマンド行からのみ使うことができ、一回のGHC/GHCiの実行を通して有効である。</para>
</listitem>
</varlistentry>
</variablelist>
<para>フラグの早見表(<xref linkend="flag-reference"/>)にはそれぞれのフラグがどれに分類されるか記されている。</para>
<para>静的でありながら、GHCiの<literal>:set</literal>コマンドで設定できるフラグも少しながらある。これは表中では“静/<literal>:set</literal>”と表記される。</para>
</sect1>
<sect1 id="file-suffixes">
<title>意味を持つファイル接尾辞</title>
<indexterm><primary>suffixes, file</primary></indexterm>
<indexterm><primary>file suffixes for GHC</primary></indexterm>
<para>「意味を持つ」接尾辞(例えば、<filename>.lhs</filename>や<filename>.o</filename>)を持つファイルは、それにしたがって「適切な」方法で処理される。</para>
<variablelist>
<varlistentry>
<term><filename>.hs</filename></term>
<listitem>
<para>Haskellモジュール。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<filename>.lhs</filename>
<indexterm><primary><literal>lhs</literal> suffix</primary></indexterm>
</term>
<listitem>
<para>「文芸的Haskell」モジュール。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.hi</filename></term>
<listitem>
<para>おそらくはコンパイラによって生成された、Haskellインタフェースファイル。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.hc</filename></term>
<listitem>
<para>Haskellコンパイラによって生成された中間のCファイル。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.c</filename></term>
<listitem>
<para>Haskellコンパイラによって生成されたもの以外のCファイル。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.ll</filename></term>
<listitem>
<para>llvm中間言語のソースファイル。ふつうはコンパイラによって生成される。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.bc</filename></term>
<listitem>
<para>llvm中間言語のビットコードファイル。ふつうはコンパイラによって生成される。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.s</filename></term>
<listitem>
<para>アセンブリ言語のソースファイル。ふつうはコンパイラによって生成される。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>.o</filename></term>
<listitem>
<para>アセンブラによって生成されたオブジェクトファイル。</para>
</listitem>
</varlistentry>
</variablelist>
<para>これ以外の接尾辞を持つファイル(または接尾辞を持たないファイル)はリンカに直接渡される。</para>
</sect1>
<sect1 id="modes">
<title>実行モード</title>
<indexterm><primary>help options</primary></indexterm>
<para>GHCの振る舞いはまずモード指定フラグによって制御される。これらのフラグのうちただ一つだけを使うことができるが、コマンド行において最初のオプションである必要はない。</para>
<para>モードフラグがない場合、コマンド行にソースファイルがあるならGHCはmakeモード(<xref linkend="make-mode"/>)に入り、そうでないならコマンド行中で指定されたオブジェクトをリンクして実行ファイルを作る。</para>
<para>以下のモードフラグが利用できる。</para>
<variablelist>
<varlistentry>
<term>
<cmdsynopsis><command>ghc</command>
<arg choice='plain'>--interactive</arg>
</cmdsynopsis>
<indexterm><primary>interactive mode</primary></indexterm>
<indexterm><primary>ghci</primary></indexterm>
</term>
<listitem>
<para>対話的モード。<command>ghci</command>としても使える。対話的モードは<xref linkend="ghci"/>で詳しく説明されている。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis><command>ghc</command>
<arg choice='plain'>--make</arg>
</cmdsynopsis>
<indexterm><primary>make mode</primary></indexterm>
<indexterm><primary><option>--make</option></primary></indexterm>
</term>
<listitem>
<para>このモードでは、GHCは複数のモジュールから成るHaskellのプログラムを、依存性を解析しながら自動的にビルドする。単純なHaskellプログラムなら、これは<command>make</command>を使うのに比べてずっと簡単で、しかも速い。makeモードは<xref linkend="make-mode"/>で説明されている。</para>
<para>コマンド行中に一つでもHaskellソースファイルがあるなら、このモードがデフォルトであり、この場合<option>--make</option>オプションは省略できる。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis><command>ghc</command>
<arg choice='plain'>-e</arg> <arg choice='plain'><replaceable>expr</replaceable></arg>
</cmdsynopsis>
<indexterm><primary>eval mode</primary></indexterm>
</term>
<listitem>
<para>式を評価するモード。これは対話的モードによく似ているが、評価する式は一つだけで、コマンド行から与えられる。さらなる詳細は<xref linkend="eval-mode"/>を見よ。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc -E</command>
<command>ghc -C</command>
<command>ghc -S</command>
<command>ghc -c</command>
</cmdsynopsis>
<indexterm><primary><option>-E</option></primary></indexterm>
<indexterm><primary><option>-C</option></primary></indexterm>
<indexterm><primary><option>-S</option></primary></indexterm>
<indexterm><primary><option>-c</option></primary></indexterm>
</term>
<listitem>
<para>これは伝統的な一括処理コンパイラモードである。このモードでは、GHCは一度に一つのソースファイルをコンパイルするか、オブジェクトファイルをリンクして実行可能ファイルを作る。コマンド行でモードが指定されなかった場合も、このモードが使われる。このときは、指定されたファイルをコンパイルして、さらにリンクしてプログラムを作る、という動作になる。<xref linkend="options-order"/>を見よ。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc -M</command>
</cmdsynopsis>
<indexterm><primary>dependency-generation mode</primary></indexterm>
</term>
<listitem>
<para>依存性生成モード。このモードでは、GHCは<literal>Makefile</literal>で使うのに適した依存性情報を生成する。<xref linkend="makefile-dependencies"/>を見よ。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --mk-dll</command>
</cmdsynopsis>
<indexterm><primary>DLL-creation mode</primary></indexterm>
</term>
<listitem>
<para>DLL作成モード。(Windowsのみ)<xref linkend="win32-dlls-create"/>を見よ。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --help</command> <command>ghc -?</command>
</cmdsynopsis>
<indexterm><primary><option>--help</option></primary></indexterm>
</term>
<listitem>
<para>使いかたに関する長いメッセージを標準出力に吐いて、終了する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --show-iface <replaceable>file</replaceable></command>
</cmdsynopsis>
<indexterm><primary><option>----show-iface</option></primary></indexterm>
</term>
<listitem>
<para><replaceable>file</replaceable>中のインタフェースを読んで、それをテキストとして<literal>stdout</literal>にダンプする。例えば、<literal>ghc --show-iface M.hi</literal>のようにする。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --supported-extensions</command>
<command>ghc --supported-languages</command>
</cmdsynopsis>
<indexterm><primary><option>--supported-extensions</option></primary><primary><option>--supported-languages</option></primary></indexterm>
</term>
<listitem>
<para>対応している言語拡張を表示する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --show-options</command>
</cmdsynopsis>
<indexterm><primary><option>--show-options</option></primary></indexterm>
</term>
<listitem>
<para>対応しているコマンド行オプションを印字する。シェルでの自動補完のために使うことができる。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --info</command>
</cmdsynopsis>
<indexterm><primary><option>--info</option></primary></indexterm>
</term>
<listitem>
<para>コンパイラに関する情報を表示する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --version</command>
<command>ghc -V</command>
</cmdsynopsis>
<indexterm><primary><option>-V</option></primary></indexterm>
<indexterm><primary><option>--version</option></primary></indexterm>
</term>
<listitem>
<para>GHCのバージョン番号を含む一行の文字列を印字する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --numeric-version</command>
</cmdsynopsis>
<indexterm><primary><option>--numeric-version</option></primary></indexterm>
</term>
<listitem>
<para>GHCの数値的なバージョン番号のみを印字する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<cmdsynopsis>
<command>ghc --print-libdir</command>
</cmdsynopsis>
<indexterm><primary><option>--print-libdir</option></primary></indexterm>
</term>
<listitem>
<para>GHCのライブラリディレクトリのパスを表示する。これはGHCのライブラリファイル、インタフェースファイル、およびインクルードファイルが置かれているディレクトリツリーの最上位である。(Unixではふつう<literal>/usr/local/lib/ghc-5.04</literal>のようなところである)これはパッケージ設定ファイルにおける<literal>libdir</literal><indexterm><primary><literal>libdir</literal></primary></indexterm>の値である。(<xref linkend="packages"/>を見よ)</para>
</listitem>
</varlistentry>
</variablelist>
<sect2 id="make-mode">
<title><command>ghc</command> <option>--make</option>を使う</title>
<indexterm><primary><option>--make</option></primary></indexterm>
<indexterm><primary>separate compilation</primary></indexterm>
<para>このモードではGHCは複数のモジュールから成るプログラムをビルドする。このとき、GHCは根となる一つ以上のモジュール(ふつうは<literal>Main</literal>だけ)から出発して依存性を追跡する。例えば、<literal>Main</literal>モジュールが<filename>Main.hs</filename>というファイルに置かれているとすると、次のようにしてこのプログラムをコンパイル・リンクすることができる。</para>
<screen>
ghc --make Main.hs
</screen>
<para>実際には、コマンド行中にHaskellソースファイルが一つでもあり、他のモードが指定されてもいないなら、GHCは自動的にmakeモードに入るので、この例では次のように入力するだけでも良い。</para>
<screen>
ghc Main.hs
</screen>
<para>ソースファイル名やモジュール名はいくつ指定しても良い。それらを初期モジュールとしてインポートを追いかけることで、GHCはプログラムの全てのモジュールを見つけ出す。次に、古くなったモジュールの再コンパイルが試みられ、最後に、もし<literal>Main</literal>モジュールがあるなら、プログラムはリンクされて実行可能形式になる。</para>
<para>伝統的な<literal>Makefile</literal>に比べて、<literal>ghc --make</literal>を使うことの利点は、以下のようなことである。</para>
<itemizedlist>
<listitem>
<para>コンパイルのためにGHCを再起動する必要がないので、コンパイル間で情報をキャッシュすることができる。複数のモジュールから成るプログラムを<literal>ghc --make</literal>でコンパイルすると、個々のソースファイルに対して<literal>ghc</literal>を走らせたときに比べて二倍も速いことがある。</para>
</listitem>
<listitem>
<para><literal>Makefile</literal>を書く必要がない。</para>
<indexterm><primary><literal>Makefile</literal>s</primary><secondary>avoiding</secondary></indexterm>
</listitem>
<listitem>
<para>起動されるたびにGHCが依存関係を再計算するので、ソースとの整合性が失われることがない。</para>
</listitem>
<listitem>
<para><literal>-j</literal>フラグを使うと、モジュールを並列にコンパイルできる。<replaceable>N</replaceable>個のジョブを並列コンパイルするには<literal>-jN</literal>と指定すれば良い。</para>
</listitem>
</itemizedlist>
<para>この章でこれ以降に解説されるコマンド行オプションは全て<option>--make</option>とともに用いることができる。ただし、コマンド行から与えられたオプションは全てのソースファイルに適用されるので、単一のソースファイルにのみ適用したいオプションについては<literal>OPTIONS_GHC</literal>プラグマ(<xref linkend="source-file-options"/>を見よ)を使う必要があることに注意せよ。</para>
<para>プログラムを追加のオブジェクト(例えばCの補助コード)にリンクする必要があるなら、そのオブジェクトファイルをコマンド行で与えれば、GHCは実行ファイルをリンクするときにそれを含める。</para>
<para>GHCはソースファイルがあるときしか依存関係を追跡できないので、ソースコードのないモジュールがプログラムに含まれていると、たとえオブジェクトファイルとインタフェースファイルがあったとしても、GHCは文句を言うことに注意せよ。パッケージのモジュールはこの規則の例外で、ソースファイルがあってもなくても良い。</para>
<para>プログラムのソースファイルが全て同じディレクトリにある必要はない。<option>-i</option>オプションを使ってディレクトリを探索パスに加えることができる。(<xref linkend="search-path"/>を見よ)</para>
</sect2>
<sect2 id="eval-mode">
<title>式評価モード</title>
<para>式を評価するモード。これは対話的モードによく似ているが、評価する式は一つだけで、コマンド行から<option>-e</option>オプションの引数として与えられる。</para>
<screen>
ghc -e <replaceable>expr</replaceable>
</screen>
<para>コマンド行からHaskellソースファイルを指定することもでき、それらは対話的モードと全く同じようにロードされる。指定された式はロードされたモジュールの文脈で評価される。</para>
<para>例えば、<literal>Main</literal>というモジュールを含むHaskellプログラムをロードして走らせるには、次のようにすれば良い。</para>
<screen>
ghc -e Main.main Main.hs
</screen>
<para>また、このモードを、単に式を<literal>Prelude</literal>の文脈で評価するのに使うこともできる。</para>
<screen>
$ ghc -e "interact (unlines.map reverse.lines)"
hello
olleh
</screen>
</sect2>
<sect2 id="options-order">
<title>一括処理コンパイラモード</title>
<para><emphasis>一括処理</emphasis>モードでは、GHCはコマンド行で与えられた一つ以上のソースファイルをコンパイルする。</para>
<para>コンパイルが、複数ある段階のどこから始まるかは、それぞれの入力ファイルの接尾辞によって決定される。また、どこで終わるかは、フラグによって決定される。もしこれに関連するフラグが与えられなかったときは、リンクまでの全ての段階を実行する。次の表はこれをまとめたものである。</para>
<informaltable>
<tgroup cols="4">
<colspec align="left"/>
<colspec align="left"/>
<colspec align="left"/>
<colspec align="left"/>
<thead>
<row>
<entry>コンパイルシステムの段階</entry>
<entry>ここから開始する接尾辞</entry>
<entry>ここまでで終了することを指示するフラグ</entry>
<entry>出力ファイル(の接尾辞)</entry>
</row>
</thead>
<tbody>
<row>
<entry>文芸形式プリプロセッサ</entry>
<entry><literal>.lhs</literal></entry>
<entry>-</entry>
<entry><literal>.hs</literal></entry>
</row>
<row>
<entry>Cプリプロセッサ(省略可能)</entry>
<entry><literal>.hs</literal> (<option>-cpp</option>が与えられたとき)</entry>
<entry><option>-E</option></entry>
<entry><literal>.hspp</literal></entry>
</row>
<row>
<entry>Haskellコンパイラ</entry>
<entry><literal>.hs</literal></entry>
<entry><option>-C</option>, <option>-S</option></entry>
<entry><literal>.hc</literal>, <literal>.s</literal></entry>
</row>
<row>
<entry>Cコンパイラ(省略可能)</entry>
<entry><literal>.hc</literal> or <literal>.c</literal></entry>
<entry><option>-S</option></entry>
<entry><literal>.s</literal></entry>
</row>
<row>
<entry>アセンブラ</entry>
<entry><literal>.s</literal></entry>
<entry><option>-c</option></entry>
<entry><literal>.o</literal></entry>
</row>
<row>
<entry>リンカ</entry>
<entry><replaceable>other</replaceable></entry>
<entry>-</entry>
<entry><filename>a.out</filename></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<indexterm><primary><option>-C</option></primary></indexterm>
<indexterm><primary><option>-E</option></primary></indexterm>
<indexterm><primary><option>-S</option></primary></indexterm>
<indexterm><primary><option>-c</option></primary></indexterm>
<para>そういうわけで、次のようなものがよくある起動のされかたである。</para>
<screen>
ghc -c Foo.hs
</screen>
<para>これはHaskellソースファイル<filename>Foo.hs</filename>をコンパイルしてオブジェクトファイル<filename>Foo.o</filename>を生成する。</para>
<para>注意: Haskellコンパイラが実際に出力するのが何かはバックエンドのコード生成器が何かによる。詳しくは、<xref linkend="code-generators"/>を見よ。</para>
<para>注意: Cプリプロセスは省略可能であり、<option>-cpp</option><indexterm><primary><option>-cpp</option></primary></indexterm>フラグによって有効になる。詳しくは<xref linkend="c-pre-processor"/>を見よ。</para>
<para>注意: <option>-E</option><indexterm><primary>-E option</primary></indexterm>オプションはコンパイラをプリプロセス段階まで走らせ、結果をファイルに出力する。</para>
<sect3 id="overriding-suffixes">
<title>ファイルに対するデフォルトの振る舞いを上書きする</title>
<para>上記のように、GHCがファイルを処理する方法はその接尾辞による。これは<option>-x</option>オプションを使って変更できる。</para>
<variablelist>
<varlistentry>
<term><option>-x</option> <replaceable>suffix</replaceable>
<indexterm><primary><option>-x</option></primary>
</indexterm></term>
<listitem>
<para>コマンド行においてこれに続く全てのファイルを<replaceable>suffix</replaceable>という接尾辞を持つかのように扱う。例えば、<literal>M.my-hs</literal>というファイルにあるHaskellモジュールをコンパイルするには、<literal>ghc -c -x hs M.my-hs</literal>とすれば良い。</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
</sect2>
</sect1>
<sect1 id="options-help">
<title>多弁さに関するオプション</title>
<indexterm><primary>verbosity options</primary></indexterm>
<para><xref linkend="modes"/>にある、<option>--help</option>、<option>--version</option>、<option>--numeric-version</option>、<option>--print-libdir</option>の各モードも参照。</para>
<variablelist>
<varlistentry>
<term>
<option>-v</option>
<indexterm><primary><option>-v</option></primary></indexterm>
</term>
<listitem>
<para><option>-v</option>はGHCを<emphasis>多弁に</emphasis>する。GHCはバージョン番号を報告し、コンパイルシステムの段階ごとに、どのようにそれを起動したか(標準エラー出力に)表示する。さらに、大部分のコンパイル段階に対しても<option>-v</option>を渡し、渡されたものはバージョン番号(ほかの情報もあるかもしれない)を報告する。</para>
<para>心よりのお願いとして、バグを報告するときは<option>-v</option>オプションを使って頂きたい!我々は常に、あなたが正しいものを正しい順序で走らせているということを最初に確かめたいのである。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-v</option><replaceable>n</replaceable>
<indexterm><primary><option>-v</option></primary></indexterm>
</term>
<listitem>
<para>より正確にコンパイラの多弁さを制御するために、<option>-v</option>は省略可能な数値引数をとる。<option>-v</option>を単独で指定するのは<option>-v3</option>と同じで、そのほかの水準は以下のような意味を持っている。</para>
<variablelist>
<varlistentry>
<term><option>-v0</option></term>
<listitem>
<para>本質的でないメッセージを表示しない。(これがデフォルトである)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v1</option></term>
<listitem>
<para>最小限の多弁さ。コンパイル一回毎に一行を表示する。(<option>--make</option>または<option>--interactive</option>が有効のときはこれがデフォルト)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v2</option></term>
<listitem>
<para>コンパイル段階が実行されるときに、その名前を印字する。(<option>-dshow-passes</option>と同等)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v3</option></term>
<listitem>
<para><option>-v2</option>と同じであるが、各コンパイル段階について完全なコマンド行(あれば)を印字する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v4</option></term>
<listitem>
<para><option>-v3</option>と同じだが、各コンパイル段階が終わった後にその段階での中間形式でプログラムを表示する。(プリプロセスの結果とC/アセンブリファイルを除く)</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--fprint-explicit-foralls, -fprint-explicit-kinds</option>
<indexterm><primary><option>-fprint-explicit-foralls</option></primary></indexterm>
<indexterm><primary><option>-fprint-explicit-kinds</option></primary></indexterm>
</term>
<listitem>
<para>これら二つのフラグは、エラーメッセージやGHCiにおいてGHCが型を表示する際、そのやりかたに影響する。<option>-fprint-explicit-foralls</option>は、型の最上位において明示的に(通常表示されない)<literal>forall</literal>を表示する。以下はGHCi内での例である。
<screen>
ghci> let f x = x
ghci> :t f
f :: a -> a
ghci> :set -fprint-explicit-foralls
ghci> :t f
f :: forall a. a -> a
</screen>
<option>-fprint-explicit-kinds</option>を使うと、通常抑制される型内の種forallと種適用を表示するようになる。種多相を使っている場合、これが重要になることがある。例を挙げる。
<screen>
ghci> :set -XPolyKinds
ghci> data T a = MkT
ghci> :t MkT
MkT :: T b
ghci> :set -fprint-explicit-foralls
ghci> :t MkT
MkT :: forall (b::k). T b
ghci> :set -fprint-explicit-kinds
ghci> :t MkT
MkT :: forall (k::BOX) (b:k). T b
</screen>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-ferror-spans</option>
<indexterm><primary><option>-ferror-spans</option></primary>
</indexterm>
</term>
<listitem>
<para>エラーメッセージに関連する構文要素がソースで占める位置を完全に出力するようにする。通常、GHCは構文要素の先頭の位置しか報告しない。</para>
<para>例えば、次のものは、</para>
<screen>
test.hs:3:6: parse error on input `where'
</screen>
<para>以下のようになる。</para>
<screen>
test296.hs:3:6-10: parse error on input `where'
</screen>
<para>また、複数行に渡る区間もあり得る。</para>
<screen>
test.hs:(5,4)-(6,7):
Conflicting definitions for `a'
Bound at: test.hs:5:4
test.hs:6:7
In the binding group for: a, b, a
</screen>
<para>行番号は一からはじまるが、カラム番号は零からはじまることに注意。これは既存の慣習に合わせたものである。(つまり、Emacsがこの方法を使っているということ)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-H</option><replaceable>size</replaceable>
<indexterm><primary><option>-H</option></primary></indexterm>
</term>
<listitem>
<para>ヒープの最小サイズを<replaceable>size</replaceable>にする。これは<literal>-RTS -H<replaceable>size</replaceable></literal>と同等である。<xref linkend="rts-options-gc"/>を見よ。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-Rghc-timing</option>
<indexterm><primary><option>-Rghc-timing</option></primary></indexterm>
</term>
<listitem>
<para>GHCの実行に要した時間についての統計情報の一行要約を表示する。このオプションは<literal>+RTS -tstderr</literal>と同等である。<xref linkend="rts-options-gc"/>を見よ。</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
&separate;
<sect1 id="options-sanity">
<title>警告と正気度チェックのためのオプション</title>
<indexterm><primary>sanity-checking options</primary></indexterm>
<indexterm><primary>warnings</primary></indexterm>
<para>GHCでは、いくつかのオプションを使って、致命的でないエラーメッセージ(警告ともいう)のうちどの種類のものを生成するか選ぶことができる。デフォルトでは、一般にプログラムのバグを示していることが多い警告が有効になっている。これは<option>-fwarn-overlapping-patterns</option>、<option>-fwarn-warnings-deprecations</option>、<option>-fwarn-amp</option>、<option>-fdeprecated-flags</option>、<option>-fwarn-unrecognised-pragmas</option>、<option>-fwarn-pointless-pragmas</option>、<option>-fwarn-duplicate-constraints</option>、<option>-fwarn-duplicate-exports</option>、<option>-fwarn-missing-fields</option>、<option>-fwarn-missing-methods</option>、<option>-fwarn-wrong-do-bind</option>、<option>-fwarn-unsupported-calling-conventions</option>、<option>-fwarn-dodgy-foreign-imports</option>、<option>-fwarn-inline-rule-shadowing</option>、<option>-fwarn-unsupported-llvm-version</option>である。以下のフラグは標準的な警告の「詰め合わせ」を簡単に選択するためのものである。</para>
<variablelist>
<varlistentry>
<term><option>-W</option>:</term>
<listitem>
<indexterm><primary>-W option</primary></indexterm>
<para>標準的な警告に加えて、 <option>-fwarn-incomplete-patterns</option>、<option>-fwarn-dodgy-exports</option>、<option>-fwarn-dodgy-imports</option>、<option>-fwarn-unused-matches</option>、<option>-fwarn-unused-imports</option>、<option>-fwarn-unused-binds</option>を提供する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-Wall</option>:</term>
<listitem>
<indexterm><primary><option>-Wall</option></primary></indexterm>
<para>疑わしいコードであることを示し得る全ての警告オプションを有効にする。<option>-Wall</option>で有効に<emphasis>されない</emphasis>警告は、<option>-fwarn-tabs</option>、<option>-fwarn-incomplete-uni-patterns</option>、<option>-fwarn-incomplete-record-updates</option>、<option>-fwarn-monomorphism-restriction</option>、<option>-fwarn-auto-orphans</option>、<option>-fwarn-implicit-prelude</option>、<option>-fwarn-missing-local-sigs</option>、<option>-fwarn-missing-import-lists</option>である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-w</option>:</term>
<listitem>
<indexterm><primary><option>-w</option></primary></indexterm>
<para>全ての警告を、標準的なものおよび<literal>-Wall</literal>が有効にしないものも含めて、無効にする。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-Werror</option>:</term>
<listitem>
<indexterm><primary><option>-Werror</option></primary></indexterm>
<para>全ての警告を致命的なエラーにする。一括コンパイルのときに警告を見逃さないようにするのに便利である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-Wwarn</option>:</term>
<listitem>
<indexterm><primary><option>-Wwarn</option></primary></indexterm>
<para>警告を警告として扱い、エラーにしない。これはデフォルトだが、<option>-Werror</option>フラグを否定するのに便利である。</para>
</listitem>
</varlistentry>
</variablelist>
<para>以下は全ての警告オプションの説明である。なんらかの警告を無効にしたいときは、単に対応する<option>-fno-warn-...</option>をコマンド行から与えれば良い。</para>
<variablelist>
<varlistentry>
<term><option>-fwarn-typed-holes</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-typed-holes</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<para><literal>_</literal>から始まる未束縛の局所変数か、単独の<literal>_</literal>を式の右辺で見つけた場合、型検査に通るためにこの項がどの型を持たねばならぬかを、エラーメッセージに含める。これは、特に <link linkend="defer-type-errors">型エラーの遅延</link>と相性が良い。<xref linkend="typed-holes"/>を見よ。</para>
<para>この警告はデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fdefer-type-errors</option>:</term>
<listitem>
<indexterm><primary><option>-fdefer-type-errors</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<para>可能なかぎり多くの型エラーを実行時まで遅らせる。コンパイル時には(エラーの代わりに)警告が出る。実行時、型エラーに依存した値を使うと、実行時エラーが発生する。しかし、コードのうち型の合っている部分はすべて問題なく走らせることができる。<xref linkend="defer-type-errors"/>を見よ</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fhelpful-errors</option>:</term>
<listitem>
<indexterm><primary><option>-fhelpful-errors</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<para>名前やパッケージがスコープにないとき、意図されていたかもしれない名前・パッケージを提案する。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-unrecognised-pragmas</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-unrecognised-pragmas</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<indexterm><primary>pragmas</primary></indexterm>
<para>GHCが認識できないプラグマが使われているときに警告を発する。GHCは、自身が使うプラグマの他に、他のツールが使うことが知られているプラグマも認識する。例えば<literal>OPTIONS_HUGS</literal>や<literal>DERIVE</literal>といったものである。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-pointless-pragmas</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-pointless-pragmas</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<indexterm><primary>pragmas</primary></indexterm>
<para>モジュールが効果のないプラグマを含んでいることをGHCが発見した場合に警告を発する。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-warnings-deprecations</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-warnings-deprecations</option></primary>
</indexterm>
<indexterm><primary>warnings</primary></indexterm>
<indexterm><primary>deprecations</primary></indexterm>
<para>WARNINGまたはDEPRECATEDプラグマの付いたモジュール・関数・型が使われたときに警告を発する。このプラグマについて詳しくは<xref linkend="warning-deprecated-pragma"/>を見よ。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-amp</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-amp</option></primary>
</indexterm>
<indexterm><primary>amp</primary></indexterm>
<indexterm><primary>applicative-monad proposal</primary></indexterm>
<para>AMP(Applicative-Monad proosal)と衝突する宣言がある場合に警告する。具体的には、1. ApplicativeでないMonadインスタンス、2. AlternativeでないMonadPlusインスタンス、3. join/pure/<*>の独自定義。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-deprecated-flags</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-deprecated-flags</option></primary>
</indexterm>
<indexterm><primary>deprecated-flags</primary></indexterm>
<para>非推奨のコマンド行フラグが使われたときに警告を発する。</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-unsupported-calling-conventions</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-unsupported-calling-conventions</option></primary>
</indexterm>
<para>対応していない呼び出し規約を使ったforeign宣言があると警告を発する。特に、<literal>stdcall</literal>呼び出し規約がi386以外のアーキテクチャで使われると、<literal>ccall</literal>として扱われる。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-dodgy-foreign-imports</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-dodgy-foreign-imports</option></primary>
</indexterm>
<para>次の形式のforeign importに対して警告を発する。</para>
<programlisting>
foreign import "f" f :: FunPtr t
</programlisting>
<para>なぜなら、これはおそらく次のようになっているべきだからである。</para>
<programlisting>
foreign import "&f" f :: FunPtr t
</programlisting>
<para>最初の形式は、引数を取らず、「t」型のC関数へのポインタを返す(純粋な)C関数として「f」を宣言する。一方、二番目の形式は「f」自体が「t」型のC関数であると宣言する。前者は通常ミスであり、クラッシュを引き起すためデバッグが難しい。そのためこの警告がある。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-dodgy-exports</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-dodgy-exports</option></primary>
</indexterm>
<para>データ型<literal>T</literal>が全ての構築子を伴って、つまり<literal>T(..)</literal>としてエクスポートされているが、それが型シノニムにすぎない場合に警告を発する。</para>
<para>また、あるモジュールが再エクスポートされているが、そのモジュールが何もエクスポートしていない場合にも警告する。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-dodgy-imports</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-dodgy-imports</option></primary>
</indexterm>
<para>以下の場合に警告を発する。</para>
<itemizedlist>
<listitem>
<para>データ型<literal>T</literal>が全ての構築子を伴ってインポート(つまり<literal>T(..)</literal>)されているものの、抽象的にエクスポート(つまり<literal>T</literal>)されている。</para>
</listitem>
<listitem>
<para><literal>import</literal>文が、エクスポートされてない実体を(訳注: <literal>hiding</literal>で)隠した場合。</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-overflowed-literals</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-overflowed-literals</option></primary>
</indexterm>
<para>リテラルがオーバーフローするであろう場合に警告する。例: <literal>300 :: Word8</literal>。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-empty-enumerations</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-empty-enumerations</option></primary>
</indexterm>
<para>列挙が空の場合に警告する。例: <literal>[5 .. 3]</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-lazy-unlifted-bindings</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-lazy-unlifted-bindings</option></primary>
</indexterm>
<para>このフラグはno-opであり、GHC 7.10で削除される。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-duplicate-constraints</option>:</term>
<listitem>
<indexterm><primary><option>-fwarn-duplicate-constraints</option></primary></indexterm>
<indexterm><primary>duplicate constraints, warning</primary></indexterm>
<para>型シグネチャに二重になった制約がある場合に警告する。例えば、
<programlisting>
f :: (Eq a, Show a, Eq a) => a -> a
</programlisting>
この警告は<literal>Eq a</literal>制約が二重になっていることを指摘する。
</para>
<para>このオプションはデフォルトで有効である。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-fwarn-duplicate-exports</option>:</term>