环境资料:
- 运行 NFS 3 的 Solaris NFS 文件服务器
- Linux 或 Solaris 环境中出现错误
- 使用 GNU Make 3.82
- 使用 Sun Studio 编译器,如果这很重要
这是我正在查看的构建的一个非常简化的示例:
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
short & sweet: $(realpath x y z)
(x/y/z 如果它们存在则返回;返回一个绝对路径,不包括符号链接) 在某些情况下从列表中删除文件,我认为它与 NFS 有关。无法预测哪个目标会失败。有时,目标在最后 10 次成功时会失败。如果我@false
退出宏,构建会继续进行而不会出错——也就是说,链接器不会抱怨所谓的丢失文件。
我就不给你冗长的解释了;可以说,宏有助于调试。