22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

(2019年版)コマンドラインからclを使ってコンパイルできるようにしたので共有する

Last updated at Posted at 2019-10-20

###はじめに
 こんにちは。この記事はVisualStudio2019に付属するcl.exeをコマンドラインから使えるようにしたときにした作業のメモです。私は結構前からwindowsネイティブなC言語環境を使ってみたいと思ってました。ちょっと前まではgccを使っていて、それでも不満は特になかったんですが、どーせwindowsを使っているならそれ専用のものを使いやすくしたいなという気持ちです。自分みたいに困っている人がいたとしたら参考にしてください。

###環境
まっさらな所から始めたかったのでwindows sandboxを使用

###概要
1.VisualStudio2019をインストール。適切なコンポーネントもいれる。
2.x64 Native Tools Command Prompt for VS 2019を起動して必要な環境変数を確認して登録する。
3.コマンドよりコンパイルしてみる。

###VisualStudioをインストール
https://visualstudio.microsoft.com/vs/
->communityをインストールします
01 インストーラー.PNG
画像のようにwindows系と右下のwindows10sdk最新のバージョンとMSVCの二つにチェックを入れインストールする。

clが動くようにパスに通す。Pathの末尾に登録する。
-> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64
通したらこの時点でできるか試す。
03 clのパス確認 (2).PNG
こんな感じになったらok

###x64 Native Tools Command Prompt for VS を起動
最近追加されたものの中にあるx64 Native Tools Command Prompt for VSを起動する。
このプロンプトから以下のソースコードがコンパイルできるか試す。

main_c.c
#include <stdio.h>
int main(){
    printf("Hello MSVC");
    return 0;
}
main_cpp.cpp
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[]) {
    char str[] = "hello";
    string str_2 = " cl.exe";
    cout << str << str_2 << endl;
    return 0;
}

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cl /EHsc C:\Users\{ユーザー名}\main_c.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cl /EHsc C:\Users\{ユーザー名}\main_cpp.cpp

この時点でエラーとかxxx.libがありません的なメッセージが無いなら90%勝ったようなものです。

環境変数を確認する
echo %INCLUDE%
echo %LIB%
echo %LIBPATH%
03 環境変数の確認 (2).png

これらをそれぞれべたっと環境変数に登録します。
04 こんな感じになる (2).png
こんな感じになる。

###ソースをコンパイル
一回さっきのプロンプトを閉じてcmdを素で起動する。
さっきと同じ同じようにコンパイルする。
C:\Users\{ユーザー名}>cl /EHsc main_c.c
C:\Users\{ユーザー名}>cl /EHsc main_cpp.cpp
05 上手くいったとき (2).png
C:\Users\{ユーザー名}>main_c.exe
C:\Users\{ユーザー名}>main_cpp.exe
06 result.png

###おわりに
 ネットだとやれkernel32.libが無いとかcorecrt.hが無いとかであって、バージョン違いで情報が錯綜していて分かりずらいので、まあ成功例の一つとして報告しておきます。この記事を書くためにsandboxを起動したときは少しは苦戦するかなとおもったらまったく詰まらず組み立てられたので今まで自分は何をしていたのだという気分です。
 ところでC言語弱者の私に/EHscコマンドの意味を教えてください(公式ドキュメントみてもわからんかった)。お願いします。

###追記
いろいろいじろうと思ったらwindows.hが開けなかったので対処しました。
自分の環境でという話ですがとりあえず解決したので参考までに
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
この二つをINCLUDEの末尾に追加する。

22
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?