MacbookAir(2013)でc++の環境構築をしてみた
そういえば、古い Macbook Air (2013) 13 inch を普段使い用に使っていて
ここにいる皆さんとは比べ物にならない低いマシンパワーじゃないかなとふと思いました。
ノートゲーミングPC(Ubuntu)もあるにはあるんですが、起動している時間が2−4時間とか普段使いには使い難いんですよね。基本大量の計算とかGPUがいる処理用にしか使ってません。(移動民族なのでノートしか選択肢がありません)
そろそろ替え時だとは思ってはいるんですが、最新型のタッチバーとかよく分からんです。サーフェイスも性能の割には高いし、DELLにしようか、凄く悩みます。薄い軽いノートを買ってUbuntu2台持ち?は何となく不安(2019年8月現在)
環境
Macbook Air 13 Mid 2013
macOS Mojave Version 10.14.6
Xcode 10.3をダウンロード
参考資料
Youtube video: "How to Setup C++ on Mac"
上のYoutube Videoに沿って、xcodeをダウンロードして設定とかを決めて
実際にコードを実行してみたところ、
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "Hello World" << endl;
}
'bits/stdc++.h' file not found
いきなりエラーが出ました。
そこでググると「stackoverflow 」で問題点を解説していて、「stdc++.h」が必要との事なのでそのファイルをダウンロードして自分の好きなフォルダに保存
そしてまた実行してみる
#include "/<自分の好きなフォルダ場所>/stdc++.h"
using namespace std;
int main() {
cout << "Hello World" << endl;
}
するとビルド?が成功し、Hello World も無事アウトプットする事が出来ました。
ですがc++14を使いたいのに、右側のサイドバーにはDefault - C++ Sourceという基準になっていて
上の二つの基準がどう違うのか良く分かりません。
追記
ググっていると
C++ Newbie Tour: Getting Started With C++ On Mac OSX
という記事を見つけて
c++のバージョンを調べてくれるコードを見つけたので実行してみると
#include <iostream>
int main(){
#if __cplusplus == 201402L
std::cout << "C++14" << std::endl;
#elif __cplusplus==201103L
std::cout << "C++11" << std::endl;
#else
std::cout << "C++" << std::endl;
#endif
return 0;
}
c++14と出たのでc++14なんですかね?
Xcode内を調べてみると
Build Settings
の Apple Clang - Language - C++
の C++ Language Dialect
が GNU++14 [-std=gnu++14]
を採用していたらしく、これのお陰でc++14基準になっているんだろうか?と予測を立ててみました。
他にも沢山候補があったので
GNU++14 [-std=gnu++14]
の部分を
c++11 [-std=c++11]
やGNU++11 [-std=gnu++11]
に変えると
上のコードの結果がc++11になったので
多分そうなんだろうと思いました。合ってますかね?
GNU++17 [-std=gnu++17]
とc++17 [-std=c++17]
の候補もあったので
これもテストしてみます
What is the value of __cplusplus for C++17?
上の記事によると、c++17のcplusplusの値は 201703L
らしいので
#include <iostream>
int main(){
#if __cplusplus == 201703L
std::cout << "C++17" << std::endl;
#elif __cplusplus == 201402L
std::cout << "C++14" << std::endl;
#elif __cplusplus==201103L
std::cout << "C++11" << std::endl;
#else
std::cout << "C++" << std::endl;
#endif
return 0;
}
というコードを新たに試してみました。
予想通りに、候補を変える度に
結果がc++11, c++14, c++17と変わっていきました。
あと、AtCoderでは
Program ended with exit code: 0
という値が出てこないのですが、ここでは(Xcode上では)毎回最後に出てきます。
何でだろうと思い、ググってみると
The message doesn't come from your program itself, but from the IDE (e.g. Visual Studio) that launches the program. Try launching it from the command-line or by double-clicking the .exe file.
あれ?IDEを使っていると出てくるらしいんですが、command-line-toolをXcode内で選んでいたと思ったんですけど、よく分かりません。
ただ、エラーが無いという事を教えてくれているだけなので、別に大した事では無いですね。
あと、GNU++
とc++
の違いは???
What are the differences between -std=c++11 and -std=gnu++11?
上の記事によると
The difference between the two options is whether GNU extensions that violates/extend the C++ standard are enabled or not.
二つの違いは
標準c++を拡張する/違反するGNU拡張が使えるかどうか・・・
意味がよく分かりませんがGNU用かそうでないかという事なんですかね?
なので基本c++14を使う予定です。
これで初心者用のコンパイラの構築は出来たかな?と思います
まだ気になっている事
- gcc?
- g++?
- IDE?
- CMake?
- Clang?
- Clion?
- などなど
https://solarianprogrammer.com/2017/05/21/compiling-gcc-macos/
https://kig.re/2018/09/20/c++-newbie-tour-how-to-get-started-with-c++-on-mac-osx.html
追記
下のコードでもstdc++.hが使えるようになりました。
<>とか””とかの機能はどう違うんですかね?
#include </"自分の好きなフォルダ場所"/stdc++.h>
using namespace std;
int main() {
cout << "Hello World" << endl;
}