環境関連:
- NFS3を実行しているSolarisNFSファイルサーバー
- LinuxまたはSolaris環境でエラーが発生する
- GNUMake3.82の使用
- 重要な場合は、SunStudioコンパイラを使用する
これは、私が見ているビルドの非常に単純化された例です。
all: ${list of shared objects to build}
@do whatever
lib1.so: ${1s objects}
lib2.so: ${2s objects}
lib3.so: ${3s objects}
#...
%.so:
$(call CHECK_DEPENDENCIES_EXIST)
@${LD} ${LDFLAGS} ${^} -o ${@}
%.o : %.c
@do stuff
%.o : %.cc
@do stuff
define CHECK_DEPENDENCIES_EXIST =
$(if $(realpath ${^}),,$(warning No dependencies specified for ${@})false)
endef
短くて甘い:$(realpath x y z)
(x / y / zが存在する場合は返されます。シンボリックリンクを含まない絶対パスを返します)は、状況によってはリストからファイルを削除します。これはNFSに関係していると思います。どのターゲットが失敗するかは予測できません。過去10回成功すると、ターゲットが失敗することがあります。マクロを@false
削除すると、ビルドはエラーなしで続行されます。つまり、リンカーは、おそらく欠落しているファイルについて文句を言いません。
引き出された説明は割愛します。マクロはデバッグに役立ちます。