makefile - AC_SUBST指定其他源目录

我有一个将变量定义为的配置:

AC_ARG_WITH(mylib,
[  --with-mylib=PATH     Sets PATH for my additional sources (../mylib) ],
[
        MYLIB_PATH="${withval}"
        AC_MSG_RESULT(Using mylib source from ${withval})
],[
        MYLIB_PATH="../mylib"
])

dnl convert to absolute path
MYLIB_PATH=`readlink -f ${MYLIB_PATH}`
AC_SUBST(MYLIB_PATH)
AC_OUTPUT(Makefile src/Makefile)

我的顶级Makefile.am是:

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src

然后在我的src/Makefile.am我要从指定的mylib路径添加源:

...
bin_PROGRAMS = fooApp
fooApp_SOURCES = main.c \
            @MYLIB_PATH@/logger.c
fooApp_CFLAGS = -I@MYLIB_PATH@/lib

因此,我的想法是为这些共享源保留一个单独的存储库。 在配置过程中,我可以指定将它们检出的位置。 即:

./configure --with-mylib=/tmp/mylib 

不幸的是,当我运行configure时,该脚本似乎在我的src下创建了一个.deps(用于.Po文件),就像它删除了路径的第一个斜杠一样:

src/tmp/mylib/.deps/fooApp-logger.Po

现在,显然make失败了,因为它试图从以下路径加载.Po文件: /tmp/mylib/.deps/fooApp-logger.Po

知道我在做什么错吗? 告诉配置在哪里可以找到我的其他来源的正确方法是什么?

对于面临类似问题的任何人,我都怀疑这是automake的问题,该问题在通过AC_SUBST的扩展路径计算.Po文件的路径位置时出现了问题。

解决方法是在定义通过AC_SUBST扩展的路径时始终使用相对路径而不是绝对路径。

在上面的示例中,不要使用readlink`` to convert MYLIB_PATH to absolute, instead use路径readlink`` to convert MYLIB_PATH to absolute, instead use realpath```来查找执行构建的目录的相对路径:

MYLIB_PATH=`realpath --relative-to src "${MYLIB_PATH}"`

我已经创建了完整的复制器,并向GNU提交了错误(bug#37499)

转载请注明来自askonline.tech,本文标题:makefile - AC_SUBST指定其他源目录


 Top