環境はMac OSX Lion 10.7
開発環境を揃える
Command Line Tools for Xcodeをインストール
表題の通り、Apple Developerからダウンロードしてインストール。
これを入れるとUNIXコマンド系がひと通り /usr 以下に入って使いやすかった気がする。
MacPortからC++開発環境をインストール
The MacPorts Project -- Home
portsのインストールはどうやったか忘れた。
インストールした後、clang-mp-3.3, libtool, automake, autoconf, gsedあたりを入れる。
# port selfupdate # port install clang-mp-3.3 libtool automake autoconf gsed
portで入るものは /opt/local 以下に入るので、パスを合わせる。
$ vim ~/.bash_profile + alias ll='ls -l' + export PATH=$PATH:/opt/local/bin:/opt/local/sbin
あと、通常のlibtoolはclangに対応していないはずなので /usr/bin/libtool があればリネームして使わないようにしておく。
portで入る /opt/local/bin/libtool を使用する。
Emacsを入れる
X上でのEmacsはこれでいいでしょ。はい、ヨロシクぅ!
GNU Emacs For Mac OS X
国民が知らないMacOSXでのC++11の真実
詳しくは以下
http://mlucassmith.tumblr.com/post/8052052794/c-11-on-osx-is-a-mess
要は
・GCCを使ってObjective-Cのプログラム(Cocoaのコードをインクルード)をコンパイルすることは不可能
・Apple GCC 4.2.1は糞なので古いのでC++11をサポートしていない(デフォルトのコンパイラはこれだったと思う)
・Clang++はCocoaのコードをインクルードしてコンパイルできる、C++11のコードもまずまず使える
…どうもAppleはGCCがGPLv.3であることを嫌っているようだ
しかもCocoaのコードにはGCCからのビルドをブロックする機構があるらしい、GCCには解析できない文法を追加している(?)
Why Can't I Compile Objective-C/C++ (.mm) Files with MacPorts gcc-mp-4.6? - Stack Overflow
追記:ここでのBlocksとはObjective-Cで新たに追加された文法のことらしい。Perlでいう無名関数と同じようなものらしい。よかった、GCCが排除されたというわけではないんだね。
clang++での設定
clang++のMacPort版はC++11が結構使える。ただしコンパイル、リンク時にオプションを付加する必要がある。
詳しくは以下
"libc++" C++ Standard Library
とは言ってもやることは2つほどしかない。
・C++11の機能を使いたい場合、コンパイルオプションに「-std=c++11」をつける
・stdc++で使っているような標準C++の機能を使いたい場合「-stdlib=libc++」をつける
だから、AutotoolsでC++11/libc++を使用する場合(他の環境では当然使えるはずなんですが…)以下のようになる
CC = 'clang-mp-3.3' CXX = 'clang++-mp-3.3' CXXFLAGS = '-std=c++11 -stdlib=libc++'
で、このコンパイルフラグを使わないとC++ポケリに書いてあるようなことがまっっったく使えないんですよ。
std::wstringがundefined referenceになるのはさすがにわろた。
- 作者: 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介
- 出版社/メーカー: 技術評論社
- 発売日: 2013/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る
wxWidgetsをC++11, libc++付きでビルド
最後、ようやくwxWidgetsのビルドができる。手順は以下
参考にしました、ありがとうございます
Bash - wxWidgets 2.9.3 を C++11 としてコンパイルする (Mac OS X 10.7 Lion) - Qiita
# git clone https://github.com/wxWidgets/wxWidgets.git # cd wxWidgets # ./configure CXXFLAGS="-stdlib=libc++ -std=c++11 -DHAVE_TYPE_TRAITS" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" \ CPPFLAGS="-stdlib=libc++" LDFLAGS="-stdlib=libc++" CXX=clang++-mp-3.3 CXXCPP="clang++-mp-3.3 -E" \ CC=clang-mp-3.3 CPP="clang-mp-3.3 -E" --enable-unicode --enable-debug --enable-gdb-debug \ --with-macosx-sdk=/Developer/SDKs/MacOSX10.7.sdk --with-macosx-version-min=10.7 --with-cocoa \ --with-libjpeg=builtin --with-libpng=builtin --with-regex=builtin --with-libtiff=builtin \ --with-zlib=builtin --with-expat=builtin --enable-std_containers --enable-std_iostreams --enable-std_string # make && make install
なぜ最新版をビルドしているかというと、wxWidgets-2.9.4ではアプリケーション起動時にwxCSConvでこけて突然死するバグがあったからだ。wxTracにて報告したら、もう直っていた。
終わり
ここまでで手順終わり
あ^〜、疲れるんじゃ^〜