2016-09-14 4 views
2

この質問は多くの時間尋ねられ、私はすべてを参照しましたが、私は少し異なる必要があります。C++はLinuxのソースファイルディレクトリを取得

私はMacBookの使用しています - 私が取得、現在のディレクトリに次の関数を使用する場合、それは別のファイルを与えるC++ 私のプログラムファイルの場所 /Users/Kandarp/ClionProjects/SimulationParser/main.cpp

のために> Clion(IDE)を(私は、ファイルがコンパイルされた実際のパスを考えると、 )

string ExePath() { 
char cwd[1024]; 
if (getcwd(cwd, sizeof(cwd)) != NULL) { 
    fprintf(stdout, "Current working dir: %s\n", cwd); 
    return cwd; 
} else { 
    perror("getcwd() error"); 
    return 0; 
}} 

を実行し、それは次のような答え与えます: /Users/Kandarp/Library/Caches/CLion2016.2/cmake/generated/SimulationParser-50b8dc0e/50b8dc0e/Debug

をしかし、私はどこ私の.cppファイルのRESIパスが必要私は間違っていますか? 助けてください

+3

C++は、世界中の100万台のコンピュータで動作することができる実際のプログラムに使用される言語です。お客様のコンピュータで実行されているプログラムが、開発者のマシン上の.cppファイルのパスを必要とするのはなぜですか? C++ **コンパイラ**はそのパスを必要とし、リンカはオブジェクトファイルのパスを必要とし、その後はそれらのパスはもう必要ありません。 – MSalters

+1

"私の.cppファイルが存在するパスが必要です"。何のために?あなたがオレオグラムを構築し、その実行可能ファイルを別のマシンにコピーするとどうなるでしょうか?開発用コンピュータにはまだパスが必要ですか? –

+0

n.m.あなたは正しい。実行可能ファイルを移動した後、開発者マシンのパスは必要ありません。私はコンセプトを誤って誤解していたので、必要でした。 – kandarp

答えて

3

あなたは何も間違っていません。

getcwd()は、実行プロセスの現在のディレクトリを提供します。

実行するC++コードを作成するために使用しているツールを指定すると、そのディレクトリからプロセスが実行されます。

アプリケーションにソースコードの場所を伝えるものは何もありません。

ソースコードがどこにあるのかをアプリケーションが知る必要がある場合は、それをmain()の引数として渡すか、アプリケーションに読み込まれた設定ファイルまたは同様の方法で入力する必要があります。

+0

お返事ありがとうございます。私はC++環境で少し新しくなっています。実行可能な例をいくつか教えてください。 – kandarp

1

__FILE__マクロを使用して、基本的なトークンを使用してディレクトリ名を抽出します。

実行中に現在のディレクトリがコンパイル単位ではなくバイナリのものであるため、この方法は機能しません。

関連する問題