我有一个我在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中的用户吗?
答案 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很可能对这些宏不满意。