技術の犬小屋

Webプログラミングを餌に生きる犬のメモ帳

WindowsでVimのvim-quickrunを使ってC言語で書いたソースファイルを実行(コンパイル)しようとしたところ、エラーで上手く動かなかったので、対処した。

C言語で開発を行うにはLinux/UNIXで使われているGNUプロジェクトのツールが必要となる。WindowsにC言語の開発環境を構築するにはCygwin(に含まれているパッケージ)を使うか、MinGWを使う方法がある。

私は日頃からCygwinを使っているので、今回はCygwin(に含まれるパッケージ)を使ってC言語の開発環境を構築した。
 
環境の構築手順を項目ごとに並べると以下のようになる。
 

  1. Cygwin(と必要なパッケージ)をインストールする
  2. Cygwinに環境変数からパスを通す
  3. CygwinがMS-DOS形式のパスに対してWarningを出さないように設定する

 
以下より、項目ごとに説明する。
 

Cygwin(と必要なパッケージ)をインストールする

Cygwinの公式(http://www.cygwin.com/)からCygwinのインストーラーをダウンロードする。
 
以下のパッケージをインストールする。
 
Devel/gcc 関連
g++ 関連
make
 
これらをインストールし忘れてしまった場合でも、再度インストーラーを実行することでパッケージを追加することができる。
 

Cygwinに環境変数からpathを通す

Windowsの環境変数のpath変数にCygwinをインストールしたディレクトリのパスを追加する。デフォルトの場所にCygwinをインストールしたのであれば、以下のパスをpath変数に追加する。
 
C:\Cygwin\bin
 

CygwinがMS-DOS形式のパスに対してWarningを出さないように設定する

CYGWINという名前で新規に環境変数を作成する。値には以下を入力する。
 
tty nodosfilewarning
 
CYGWIN変数には以下のような値を設定することができる。
 

パラメータ 概要
「(no)dosfilewarning」 本パラメータが有効な場合、POSIXスタイルのパス名ではなく、MS-DOSスタイルのパス名を使用すると警告を表示する。デフォルトは有効。
「(no)envcache」 本パラメータが有効な場合、Win32とPOSIX間での環境変数の変換をキャッシュする。マウントテーブルが変更されてもキャッシュが無効にならずに、変更前のマウントテーブルの内容に依存した値は含まれたままになるため、問題を起こす可能性がある。デフォルトは有効。
「(no)export」 本パラメータが有効な場合、これらの設定値の最終的な値が「CYGWIN」として再度エクスポートされる。デフォルトは無効。
「error_start:Win32filepath」 本パラメータが有効な場合、Cygwinで重大なエラーが発生したとき、「Win32filepath」に指定されたプログラムを起動する。これはデバッグ時に有用となる。「Win32filepath」には通常、「gdb」や「dumper」へのパスを設定する。例えば、「C:\cygwin\bin\gdb.exe」のように設定する。デフォルトは無効。
「forkchunk:size」 本パラメータは 「fork()」が一度に何バイトをコピーするのかを指定する。「forkchunk:32768」とした場合、「fork()」は一度に32768バイト(32KB)をコピーする。デフォルトは可能な限りの最大バイト数をコピーする。これは多くのケースにおいて望ましい動作であるが、いくつかの古いシステムでは遅くする。
「proc_retry:n」 causes fork() and exec*() to retry n times when a child process fails due to certain windows-specific errors.These errors usually occur when processes are being started while a user is logging off.
「(no)glob[:ignorecase]」 本パラメータが有効な場合、UNIXスタイルのワイルドカード(「[]」:ブラケット、「”」 「””」:引用符、「*」:アスタリスク、「\」によるエスケープ)を含むコマンドライン引数は、それらのワイルドカードにマッチしたファイルのリストに展開する。これは DOSコマンドラインプロンプトから実行するプログラムに対してのみ適用する。デフォルトは有効。本オプションは追加で「[no]ignorecase」を指定できる。「ignorecase」を指定した場合、ワイルドカードのマッチングは大文字、小文字を無視して行う。デフォルトは無効(「noignorecase」)。
「(no)reset_com」 本パラメータが有効な場合、シリアルポートは使用時に9600-8-N-1、フロー制御なしにリセットされる。これはポートがオープンされた時点、およびハンドルが引き継がれた時点で行われる。デフォルトは有効。
「(no)strip_title」 本パラメータが有効な場合、ウィンドウのタイトルからディレクトリパス部分を削除する。デフォルトは無効。
「(no)title」 本パラメータが有効な場合、タイトルバーに現在稼動しているプログラム名を表示する。デフォルトは無効。
「(no)tty」 本パラメータが有効な場合、CygwinはUNIX風のttyに対する「termios」などの拡張サポートを有効にする。これは一部のWindowsプログラムとの間で互換性がない。デフォルトは無効で、この場合 「tty」はテキストモードでオープンされる。本パラメータを有効にすると、「^Z」に代わり「^D」が期待どおりに動作するようになり、「stty」による設定が可能になる。なお、本パラメータはCygwinのシェルの開始前に設定されている必要があり、シェルから変更はできない。「mintty」や「xterm」などの他の端末を使用する場合、本パラメータは無効にすべきである。
「(no)upcaseenv」 本パラメータが有効な場合、非CygwinプロセスからCygwinのプロセスの起動時に、Cygwinは全環境変数の文字をすべて大文字に変換する。これはCygwin1.7以前のデフォルトの動作である。本パラメータが無効な場合、最低限の下位互換性を維持する限られたセットを除き、そして特定の重要な変数を正しく制御するために、Cygwinは環境変数の大文字、小文字は変換しない。常に大文字化された変数のリストは以下のとおり。デフォルトは無効。「ALLUSERSPROFILE」,「COMMONPROGRAMFILES」,「COMPUTERNAME」,「COMSPEC」,「HOME」,「HOMEDRIVE」,「HOMEPATH」,「NUMBER_OF_PROCESSORS」,「OS」,「PATH」,「PATHEXT」,「PROCESSOR_ARCHITECTURE」,「PROCESSOR_IDENTIFIER」,「PROCESSOR_LEVEL」,「PROCESSOR_REVISION」,「PROGRAMFILES」,「SYSTEMDRIVE」,「SYSTEMROOT」,「TEMP」,「TERM」,「TMP」,「TMPDIR」,「WINDIR」
「(no)winsymlinks」 本パラメータが有効な場合、Cygwinはシンボリックリンクを特別なヘッダが付いた読み取り専用属性のWindowsショートカットとして生成する。本パラメータが無効な場合、Cygwinはシンボリックリンクをあるマジックナンバ、パス、そしてシステム属性の通常ファイルとして生成する。通常ファイルのシンボリックリンクは読み書きが速いため、デフォルトは無効。なお、新しいシンボリックリンクでは対象ファイル名のエンコードにUTF-16を用いており、その一方で古いシンボリックリンクではANSIあるいはOEM文字セットを用いているため、Cygwin1.7以降で生成したシンボリックリンクは、古いCygwinでは読み取りできない。

 

確認

以下のC言語で書かれたコードをVimで開き、:QuickRun cを実行する。
 

#include <stdio.h>

main()
{
	printf("bow-wow");
}

 
エラーやwarningが起こらずにbow-wowと画面に出力されれば、設定が成功している。
 
 
以上
 
 
参考
Windowsのvimでquickrun
cygwin がMS-DOS形式のパスをWarningするので消した

MySQL WorkbenchでER図を作成する方法 arrow-right
Next post

arrow-left Vimのテキストオブジェクトの扱い方
Previous post

コメントを残す