LoginSignup
1
0

More than 3 years have passed since last update.

makefileを利用して簡単にmac,VSCodeでbits/stdc++.hを使う

Last updated at Posted at 2020-04-27

こんにちは。初投稿です。はてなブログに書いていたのですが、参考がQiitaばっかりだったので、こういう記事はQiitaにも書いてみようかなと思い、コピーしてみました。

元記事→こちら

競プロではC++が強いそうですね。

C++ではインクルードファイルとして

hoge.cpp
#include <iostream> //入出力
#include <string> //文字列
#include <vector> //配列
...

等々書くそうですが、面倒なのでAtCoderでは<bits/stdc++.h>を使うと良い、という話になっています。
B - 1.01.出力とコメント

これは、gccに付属する、諸々のインクルードファイルを一気に読み込むためのファイルだそうです。つまり

hoge.cpp
#include <bits/stdc++.h>

とかけば済むということです。

しかし、macでは使えないそうです(参考文献参照)。

これを、makefileを活用して楽に使えるようにしてみました。

ファイル構造

abc150/a.cppをコンパイルしてみたいと思います。

@AtCoder
|
|-- abc150
|   |-- a.cpp
|
|-- bits
|   |-- stdc++.h
|
|-- makefile
a.cpp
#include <bits/stdc++.h>
using namespace std;

int main(){
  int K, X;
  cin >> K >> X;
  if(K*500>=X){
    cout << "Yes\n";
  }else{
    cout << "No\n";
  }
  return 0;
}
%: %.cpp
    c++ -I .../@AtCoder $< -o $@
# パスは各自で書き換えてください

ちなみに上のa.cppはA - 500 Yen CoinsにACで通過します(それはそう)。

コンパイルしてみる

  • 環境

macOS Mojave バージョン10.14.6

Visual Studio Code バージョン1.44.2

(環境について何をかけば良いのかあんまりわかってないので不十分かも。ごめんなさい)

普通にコンパイルすると

$ cd .../@AtCoder
$ c++ abc150/a.cpp

abc150/a.cpp:1:10: fatal error: 'bits/stdc++.h' file not found
#include <bits/stdc++.h>
         ^~~~~~~~~~~~~~~
1 error generated.

怒られた。元々のインクルードパスにbits/stdc++.hが無いですよ、ということ。

bits/stdc++.hの準備

ここ↓にあります

これをコピペして@AtCoder/bits/stdc++.hに保存します。(行番号もコピーしてしまうので頑張って消した)

参考文献にあるように、コンパイル時にインクルードパスを指定してコンパイルすれば良いので

$ c++ -I /Users/.../@AtCoder abc150/a.cpp

これで一応はコンパイルできます。

簡単にする

毎回インクルードパスを書くのは面倒なのでmakefileを作ってそこに書いておきましょう。

ということで、冒頭にも置きましたが

# .../@AtCoder/makefile
%: %.cpp
    c++ -I /Users/.../@AtCoder $< -o $@

これだけ。ちなみに2行目の頭の空白は、スペースではなく「タブ」でなくてはいけません。

それでもって

$ cd .../@AtCoder
$ make abc150/a

でコンパイル(拡張子.cppをつけないことに注意)。実行は

$ abc150/a

です。

おまけ-Cのファイルとの共存

もともとabc150/a.cがあった場合、今まではmake abc150/aでコンパイルできたのが、makefileの変更によってmake abc150/aではc++のファイルがコンパイルされてしまいます。

makefileを改良して

%pp: %pp.cpp
    c++ -I /Users/.../@AtCoder $< -o $@

とし、c++のファイルはapp.cpp, bpp.cppのようにファイル名の方にもppをつけてやるとa.c, b.cとの共存(?)が図れます。

まあ、cをコンパイルするときは先に移動しておけば良いんですけどね

$ cd abc150
$ make a (a.cコンパイル)
$ ./a (実行)

参考文献

1
0
0

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
1
0