###はじめに
こんにちは。この記事は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をインストールします
画像のようにwindows系と右下のwindows10sdk最新のバージョンとMSVCの二つにチェックを入れインストールする。
clが動くようにパスに通す。Pathの末尾に登録する。
-> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64
通したらこの時点でできるか試す。
こんな感じになったらok
###x64 Native Tools Command Prompt for VS を起動
最近追加されたものの中にあるx64 Native Tools Command Prompt for VS
を起動する。
このプロンプトから以下のソースコードがコンパイルできるか試す。
#include <stdio.h>
int main(){
printf("Hello MSVC");
return 0;
}
#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%
これらをそれぞれべたっと環境変数に登録します。
こんな感じになる。
###ソースをコンパイル
一回さっきのプロンプトを閉じてcmdを素で起動する。
さっきと同じ同じようにコンパイルする。
C:\Users\{ユーザー名}>cl /EHsc main_c.c
C:\Users\{ユーザー名}>cl /EHsc main_cpp.cpp
C:\Users\{ユーザー名}>main_c.exe
C:\Users\{ユーザー名}>main_cpp.exe
###おわりに
ネットだとやれ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の末尾に追加する。