デバッグ情報内の相対パスがコンパイラまたはメイクファイルに依存することを知っている人はいますか?
プロジェクトをどこにでも配置できるので、相対情報が好きです。
ただし、パスが一致しないために、デバッガーがソースコードを見つけられない場合があります。
誰がデバッグ情報で相対パスまたは絶対パスを使用して制御しているのかわかりません。おそらくコンパイラ、メイクファイル、そしておそらくその両方です。
誰かが正確に知っていますか?
デバッグ情報内の相対パスがコンパイラまたはメイクファイルに依存することを知っている人はいますか?
プロジェクトをどこにでも配置できるので、相対情報が好きです。
ただし、パスが一致しないために、デバッガーがソースコードを見つけられない場合があります。
誰がデバッグ情報で相対パスまたは絶対パスを使用して制御しているのかわかりません。おそらくコンパイラ、メイクファイル、そしておそらくその両方です。
誰かが正確に知っていますか?
あなたの質問は端が少し曖昧ですが...
私が使用するコンパイラーとデバッガーでは、相対または絶対の選択は、コンパイラーに渡されるパスによって決定されます。したがって、動作を変更する場合は、コンパイラを呼び出すコマンドを変更する必要があります。つまり、makefile内のコマンドを変更する必要があります。
誰かが正確に知っていますか?
質問に正確に答えるのに十分な詳細を提供していません。
はMakefile
、make が実行するコマンドを定義します。
を実行する$(CC) -g -c foo.c -o foo.o
と、ほとんどのコンパイラは相対パスfoo.c
をオブジェクト ファイルにエンコードします。foo.c
一部のコンパイラは現在のコンパイル ディレクトリもエンコードするため、バイナリを別の場所にコピーした後でも、デバッガはオリジナルを見つけることができます( gcc
Linux では、DWARF
デバッグ情報を使用する他のほとんどのコンパイラと同様に、これが行われます)。
一方、 をMakefile
実行する$(CC) -g -c /path/to/src-directory/foo.c -o /path/to/obj-dir/foo.o
と、ほとんどのコンパイラはフル パスをオブジェクト ファイルにエンコードします。