先ほど出てきた「プロジェクト」とは,なにか一つの大きな作業をまとめたものです.大きな作業,例えば「高周期で運動する蝶形はばたき羽根の性能評価」などでは,複数の実行ファイルを用いて研究を進めることが多いわけです.たとえば
- モデルプログラム:パラメータを入力して蝶々の幾何形状を記述したファイルをゲット
- 羽ばたきプログラム:幾何形状ファイルをもとに流体計算して流れ場数値データファイルをゲットする
- 妖力プログラム:計算済みのデータファイルから魔力の時間変化を得る
- ビデオプログラム:計算済みのデータファイルから渦度の画像表示を得る
- などなど
その場合,それらの複数の実行ファイルをまとめたものが「プロジェクト」です.
プロジェクトは,自分の卒業研究に必要な,多数のプログラムを一つにまとめたものである.
実行するプログラムを,あなたが選んで,それを実行する.
ここでは,先ほど作ったプロジェクトに,別の実行ファイルを追加する方法を示します.
作成したソースコードを,コンパイル・実行する方法は,次の「デバッグ」項を参照
プロジェクトに新規のターゲットを追加
作成したプロジェクト「私の卒業研究」に実行ファイルを追加しましょう.これを「ターゲット」と呼びます.追加方法は
- 【File】【New】【Target】
- 【Command Line Tool】
- 言語は, 普通は【C++】ですね.
- 新しいターゲットには,デフォルトでメインプログラム main.cpp が作成されています.
ターゲットに新規のクラスを追加
既存のターゲットに,新しいクラスを追加するとき,ソースファイルを別々にしたほうがわかり良いです.そこで,追加のソースファイルを登録しましょう.
⭐️まあ普通は,クラス別に1ソースファイル,がわかりやすいですよね
- ターゲットを選択します:
- 【File】【New】【File....】を選択
- ファイル名を入力:
- ファイルを入れておくフォルダーは,まあデフォルトでOK:
- できた:
ターゲットに既存のクラスを追加
既存のターゲットに,先輩からもらった,あるいはダウンロードした新しいクラスを追加しましょう.ここでは,添付されているintDE.zip(サンプルだからなんでも良いのですが,これは2重指数積分ライブラリ)を追加してみましょう.
- とりあえず intDE.zip をダウンロードしてください.$HOME/Downloadsフォルダーに入るのではないか?と思います:
$HOME/Downloadsフォルダーは, Finderでは親切に「だうんろ〜ど」と翻訳されるので確認すると, intde.cpp と intde.hpp が見えます: - ではこいつをあなたのターゲットに追加します.ターゲットで二本指クリックして【Add Files to】
- で,追加するファイルを選ぶ:
- 追加できました:
ターゲットにOpenSourceライブラリーを追加
C++では,外部で開発されたライブラリーを利用して開発を行うことが多くあります.例えば,多次元配列の操作, ファイルやフォルダーの管理, MPI並列計算, 時刻や文字列の管理, インターネット通信機能などを利用するならば, まずはBOOSTライブラリーを利用するでしょう.常微分方程式の解,自動積分などは,自分でコードを書くよりはGSLを利用したほうが,圧倒的に高精度で高速です.
そりゃ,作者たちは人生かけてそれを研究しているんだよ.俺様の方が2-3日で上手に書けると考えるか?
このようなライブラリーを利用する場合,その利用を登録する必要があります.これには,プロジェクトをクリックして表示される設定画面を使います.
ここでは,とりあえずよく使うBOOSTを追加してみましょう. バージョンが古い可能性がありますが, ここからダウンロードします(新しいバージョンは研究室VPNでこちらを参照してみてください).
他で使うのは, 流体運動の可視化に使うVTK, 微積分や補間の数値解析GSL, 並列計算MPI・・・くらいですかね?
- ダウンロードしたパッケージは,【開く】【こいつAppleにみかじめ料払ってねえけど?】【ええから開け】を行ってインストールしておいてください.
- 研究では,Mac専用アプリの開発ではなく,計算サーバー類で実行できるソフトを開発します.すると,今インストールしたようなライブラリーは, Appleが提供したフォルダーにはインストールされません.それらを設定します.
- プロジェクト設定を開きます:
- HeaderおよびLibraryのSearch Paths を探し出します:
- 下図のように入力します. 多くのLinuxライブラリーは,次の2つでOKです.
- Header Search Paths: /usr/local/include
- Library Search Paths: /usr/local/lib
- できました:
- 通常,ライブラリー内部の記述に対する警告は表示されても僕らには何もできないので,無意味です.その無意味な警告を表示しないようにしておきましょう(そうしないと,あなたが書いた部分に対するエラーや警告が埋もれて見えなくなります).これは【Inhibit All Warnings】を【YES】に設定します.
- プロジェクト設定を開きます:
- プロジェクト全体設定が完了したら,ターゲット別の設定に移行します.
あるターゲット・・・例えば my_integral で, boost/filesystem を使いたくなった,としましょう.その場合の設定は以下の通りです.
- 事前準備として, /usr/local/lib をFinder のお気に入りにしておきましょう. やらなくてもなんとかなるが,そのほうが楽だから
- まずFinderで【移動】【フォルダーへ移動】
- /usr/local に移動します:
- んで, libフォルダーを【よく使う項目】に引っ張ってポイしておきます:
- まずFinderで【移動】【フォルダーへ移動】
- プロジェクト設定で,ターゲットを選択:
- Appleのしもべライブラリーが表示されてしまいますが, BoostはAppleのしもべではないので,
- 先程Finderに追加したlibから, libboost.dylib を選択:
- 入りました!
せっかく追加したので, 動くかどうか試してみましょう.boost/filesystemでは, ファイルやフォルダーを操作できます.
サンプルコードはこんな感じですかね:
念のためコードも書いておく:
#include <iostream> #include <boost/filesystem.hpp> int main(int argc, const char * argv[]) { std::cout << "Hello, World!\n"; auto current_path=boost::filesystem::current_path(); std::cout << "今いるとこは " << current_path.string() << " にゃんだな" << std::endl; return 0; }
このままでは,C++でデータファイルを作成すると, 出力したファイルが行方不明になる. そういう問題は boost/filesystem で簡単に解決できる(こういう用途のためにライブラリーってのがある).
#include <iostream> #include <boost/filesystem.hpp> int main(int argc, const char * argv[]) { std::cout << "Hello, World!\n"; auto current_path=boost::filesystem::current_path(); std::cout << "今いるとこは " << current_path.string() << " にゃんだな" << std::endl; boost::filesystem::current_path(getenv("HOME")); //これで$HOMEに変更 current_path=boost::filesystem::current_path(); //改めてフォルダーを取得すると std::cout << "今いるとこは " << current_path.string() << " にゃんだな" << std::endl; return 0; }
これを実行すると,
Hello, World! 今いるとこは /Users/sugimoto/Library/Developer/Xcode/Der...ild/Products/Debug にゃんだな 今いるとこは /Users/sugimoto にゃんだな
となる. したがって, この後にファイルを作成してデータを書き出すと, ファイルは $HOME に書き出されるので便利である.
添付 | サイズ |
---|---|
多重指数積分ライブラリー intDE.zip | 6.39 KB |