与X11库链接的最佳实践

时间:2011-05-17 13:54:15

标签: makefile portability

我有一个我在RedHat盒子上开发的X11应用程序。当我搬到CentOS时,X11库也移动了。从/usr/X11R6/lib64/usr/X11R6/lib(即使两者都运行64位),我在其他Linux / Unix系统上也看到过它们。

我曾使用-I-L编译标志直接指向makefile中的X11 lib目录,但是后来意识到,这需要在切换机器时更改makefile。

我的问题是,为了便于携带......我应该继续在makefile中使用-I-L吗?如果是这样,有没有办法自动检测位置?或者,我应该只依赖于LD_LIBRARY_PATH中的用户吗?

1 个答案:

答案 0 :(得分:0)

如果您依赖于GNU make,您可以执行以下操作:

X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib64/libX11.so.*)))
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib/libX11.so.*)))
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/lib/libX11.so.*)))
# and so on for whatever paths you come across

LDFLAGS += -L$(X11LIBS) -R$(X11LIBS)

这允许用户在命令行(make X11LIBS=/usr/local/X11R6/lib)上覆盖X11LIBS,如果没有给出用户选项,则尝试几个位置。

如果没有找到路径,你甚至可以中止构建,比如

 ifeq ($(X11LIBS),)
 $(error Could not find X11 library path, please specify in X11LIBS
 endif

如果您满足于限制Makefile的可移植性,那么所有这些只是一个选项:非GNU make很可能对这些宏不满意。