私たちは、サブプロジェクト レベルのインクルード ファイルへのシンボリック リンクを持つプロジェクト レベルのインクルード ディレクトリを作成する一連の Makefile を設定しています。多くのサブプロジェクト開発者は、インクルード ファイルを、実際のソフトウェアが配置されている別のディレクトリへのシンボリック リンクにすることを選択しています。
そこで私の質問は、別のファイルへのシンボリック リンクへのシンボリック リンク (たとえば、コンパイル中に何十回もインクルードされる可能性がある C++ ヘッダーなど) を持つことは非効率的でしょうか?
ディレクトリツリーの例:
/project/include/
x_header1.h -> /project/src/csci_x/include/header1.h
x_header2.h -> /project/src/csci_x/include/header2.h
/project/src/csci_x/
include/
header1.h -> /project/src/csci_x/local_1/cxx/header1.h
header2.h -> /project/src/csci_x/local_2/cxx/header2.h
local_1/cxx/
module1.cpp
header1.h
local_2/cxx/
module2.cpp
header2.h
答え1
非効率的とはどういう意味か分かりませんが、私の推測では「いいえ」です。
カーネルはすべてのシンボリックリンクを処理し、gnumake は open() を実行してファイルを取得するだけです。ユーザー レベルのアプリは、シンボリックリンクであるかどうかを気にしません (まあ、ほとんど気にしませんが)。ファイルを取得するだけです。
カーネルが通過する必要があるシンボリックリンクの追加レベルは、コンパイルしてキャッシュをディスクに書き込み/フラッシュする時間に比べれば重要ではありません。