如何在OSX上构建xnec2c无需手动设置ACLOCAL_PATH?
在OSX上无需手动设置路径构建xnec2c的可行方案
问题背景
用MacPorts在OSX上构建xnec2c时,会碰到autoconf找不到PKG_CHECK_MODULES宏的问题——因为MacPorts把这个宏的文件放在了/opt/local/share/aclocal这个非标准路径里。目前用户只能靠手动设置环境变量绕过去:
ACLOCAL_PATH=/opt/local/share/aclocal ./autogen.sh ACLOCAL_PATH=/opt/local/share/aclocal ./configure
现在想找个不用手动搞路径hack的方法,还提出了一个思路:先检查是否缺PKG_CHECK_MODULES,如果缺,就检测是不是OSX系统、/opt/local/share/aclocal目录存在不,还有里面有没有对应的宏。
可行实现方案
把这个检测逻辑直接写到autogen.sh里就行,让脚本自动处理OSX的特殊情况,具体这么做:
在
autogen.sh开头加一段检测代码:- 先判断
PKG_CHECK_MODULES宏是否能被autoconf找到 - 找不到的话,用
uname命令判断当前是不是OSX系统 - 接着检查
/opt/local/share/aclocal目录是否存在,而且里面有pkg.m4(就是对应PKG_CHECK_MODULES的宏文件) - 要是都满足,自动把这个路径加到
ACLOCAL_PATH环境变量里
- 先判断
修改后的
autogen.sh关键代码参考:# 先检查PKG_CHECK_MODULES是否可用 if ! autoreconf --install --dry-run 2>&1 | grep -q PKG_CHECK_MODULES; then # 判断是不是OSX系统 if [ "$(uname)" = "Darwin" ]; then MACPORTS_ACLOCAL="/opt/local/share/aclocal" # 验证目录和宏文件存在 if [ -d "$MACPORTS_ACLOCAL" ] && [ -f "$MACPORTS_ACLOCAL/pkg.m4" ]; then export ACLOCAL_PATH="${ACLOCAL_PATH:+$ACLOCAL_PATH:}$MACPORTS_ACLOCAL" echo "自动添加MacPorts aclocal路径到ACLOCAL_PATH" fi fi fi # 执行原autogen.sh的核心命令 autoreconf --install --force改完之后,用户直接正常跑
./autogen.sh和./configure就行,脚本会自动处理OSX下的路径问题,不用再手动设置环境变量。
补充说明
- 这个方案既解决了OSX用户的痛点,又不会影响其他系统的正常构建,兼容性没问题。
- 核心就是靠系统判断和路径验证,动态补充环境变量,完全不用用户手动干预。
内容的提问来源于stack exchange,提问作者KJ7LNW
相关产品推荐
相关产品推荐

