我有一个在RedHat机器上开发的X11应用程序。当我迁移到CentOS时,X11库也随之迁移。从/usr/X11R6/lib64到/usr/X11R6/lib (尽管两者都运行64位),我在其他地方的Linux/Unix系统上见过它们。
我使用了-I和-L编译标志来直接指向makefile中的X11库目录,但后来我意识到,这需要在切换机器时更改makefile。
我的问题是,为了便于携带..。我应该继续在makefile中使用-I和-L吗?如果是这样,有没有一种自动检测位置的方法?或者,我应该仅仅依靠用户在他们的LD_LIBRARY_PATH中拥有这些吗?
发布于 2011-05-19 15:24:38
如果你依赖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很可能对这些宏不满意。
https://stackoverflow.com/questions/6031847
复制相似问题