私は自分のプロジェクトにCMakeビルドシステムを使用しています。gcc/g ++の代わりに
私はすべての回でプロジェクトディレクトリを知って私のプログラムが実行したい、 私は環境変数と使用を設定すると考えていた:
getenv("MYPROJDIR")
しかし、私は全体の持続的な変数を作成する必要はありません私のプログラムを実行する前に毎回手動で一時変数を作成する必要はありません。
ビルド時にいくつかの変数を設定して、自分のソースがプロジェクトディレクトリを知っていて、実行ディレクトリの場所に関係なく入力ファイルにアクセスできるようにする方法はありますか?
私は、-Dスイッチを使用して定義するか、または使用することができます
add_definitions(-DMYPROJDIR=${PROJECT_SOURCE_DIR})
をしかし、私は人々が絶対に必要な場合を除きマクロを使用しないように言うのを聞いてきました。
全体的に私はこのfuntionality必要があります。
const string defaultinput = MYPROJDIR + "src/someinputdata.dat"
ifstream myfile(defaultinput)
、値。そして、あなたが望むプロジェクトディレクトリを配置します。もう1つの可能性は、このパスをアプリケーションの引数として渡すことです。 – johngull
マクロはそれほど悪い考えではありません。しかし、より柔軟性が必要な場合は、実行時に実行可能ファイルのパスを検索し、それに関連してデータファイルをロードすることができます。つまり、両方を別のディレクトリに移動して作業を続けることができます。 – Olivier
本当に悪い考えです。アプリケーションが別のマシンに配備またはコピーされたときに、あなたは何をしますか?この新しいマシン上のファイルにアクセスする方法をどのように知っていますか? – SergeyA