Переносимый доступ к sysconfdir через config.h - PullRequest
2 голосов
/ 27 января 2012

Мне бы хотелось, чтобы у моего приложения был портативный доступ к файлам конфигурации, установленным во время make install (dist_sysconf_DATA).Возможно ли получить доступ к $(sysconfdir) через config.h?

Ответы [ 3 ]

3 голосов
/ 27 января 2012

Да, но вы не должны делать это в соответствии с официальными голосами (например, я не собираюсь сейчас искать это руководство), чтобы продолжать поддерживать его переопределение для определенных объектов, которые будут построены.

make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o

Следовательно, что нужно делать:

AM_CPPFLAGS = -DSYSCONFDIR=\"${sysconfdir}\"
0 голосов
/ 29 августа 2018

Если вы используете autoheader, добавив его в ваш configure.ac, вы получите макрос SYSCONFDIR в вашем config.h, и он будет определен значением $ (sysconfdir) или $ {prefix} /etc.

if test "x$sysconfdir" = 'x${prefix}/etc'; then
    if test "x$prefix" = 'xNONE'; then
        sysconfdir=$ac_default_prefix/etc
    else
        sysconfdir=$prefix/etc
    fi
fi

AC_DEFINE_UNQUOTED([SYSCONFDIR], ["$sysconfdir"], [location of system configuration directory])

Но я настоятельно рекомендую не делать этого, а вместо этого использовать флаг -DSYSCONFDIR.Это меньше кода и, следовательно, менее склонны к ошибкам.Использование условия в configure.ac, о котором я упоминал, может быть не переносимым или учитывать все возможные случаи.Использование -DSYSCONFDIR - лучший вариант.Иногда внешний вид не имеет значения.

0 голосов
/ 20 февраля 2012

То, что я считаю, чаще всего делается (и это то, что я делаю)

Добавьте следующее в Makefile.am

AM_CPPFLAGS = -DSYSCONFIR='"$(sysconfdir)"'

И теперь вы можете получить доступ к SYSCONFDIR в источнике

...