2012-02-09 89 views
3

在尝试从源代码安装程序时,我发现它安装了库到/ usr/lib/[program] /,并且因为它位于64位系统上,所以无法正常工作。我不得不将这些库复制到/ usr/lib64/[program]。请注意,库文件是python,因此与体系结构无关。如何使Makefile确定系统的lib目录?

的Makefile有: libdir = /usr/lib

我怎样才能让在64位系统libdir等于lib64lib 32位?

+0

你可以在你感兴趣的平台上试试'uname -m',并告诉我们结果吗?如果它们不是太多,这可能是一个简单的解决方案。 – Beta 2012-02-09 18:42:50

+0

有问题的系统是'x86_64'或'i686'。我想一个更好的问题是如何在Makefile中对此进行测试? – 2012-02-09 18:46:23

+0

顺便说一句:不要从源代码安装到'/ usr/bin'或'/ usr/lib'中,请使用'/ usr/local',以免搞乱你的软件包管理。 – reinierpost 2012-02-10 08:22:14

回答

6

试试这个:

MACHINE := $(shell uname -m) 

ifeq ($(MACHINE), x86_64) 
libdir = /usr/lib64 
endif 
ifeq ($(MACHINE), i686) 
libdir = /usr/lib 
endif 
+0

Thanka!我结束了使用'uname -i'并检查'i386'或'x86_64'来覆盖我的基地,但是这个效果很好。 – 2012-02-10 01:17:54

+0

@DaveForgac我有'uname -i'打印'未知'的问题 – 2014-06-17 15:53:00

+0

在OS X上发生故障:)您可能需要执行'uname -s'并查找'Darwin'。 – jww 2015-08-28 21:38:23

4

这是一个很好的解决方案,但如果你进入,你有更多的变量设置你可以考虑使用构造变量名代替的情况。我发现他们更容易阅读,但YMMV。

libdir.x86_64 = /usr/lib64 
libdir.i686 = /usr/lib 

MACHINE := $(shell uname -m) 

libdir = $(libdir.$(MACHINE)) 
+0

在OS X上出现问题:)您可能需要执行'uname -s'并查找'Darwin',然后保护'libdir'分配。 – jww 2015-08-28 21:39:20