Автоинструменты: как установить глобальный флаг компиляции

Как уже упоминалось в комментариях, это проблема определения. В частности, $con не входит в объем вашей функции getPosts.

Вы должны передать свой объект соединения в качестве зависимости, например

function getPosts(mysqli $con) {
    // etc

Я также очень рекомендую прекратить выполнение, если ваше соединение не удалось. Что-то вроде этого должно быть достаточным

$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
if (mysqli_connect_errno()) {
    throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
}

getPosts($con);
19
задан Barth 27 November 2008 в 13:36
поделиться

1 ответ

Можно сделать несколько вещей:

(1) Одно решение состоит в том, чтобы включать общий фрагмент make-файла в весь Ваш Makefile.am с:

include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...

в этом случае Вы записали бы

AM_CXXFLAGS = -fpic -Wall -Wextra

к common.mk, и в будущем будет легче добавить больше макросов или правил ко всему Makefile.am с, просто редактируя этот файл.

(2) Другое решение состояло бы в том, чтобы установить эти переменные глобально в Вашем configure.ac (имя configure.in было удержано от использования давно), как в:

...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...

Затем Вы ничего не должны даже говорить в Вашем Makefile.am с, они автоматически наследовали это глобальное определение. Недостаток состоит в том, что Вы не можете уклонение легко (с первым решением, которое легко решить не включать common.mk), и зависимость не является действительно явной сторонним людям (когда они читают Makefile.am, у них нет подсказки о том, куда флаги могут прибыть из).

(3) решение для трети А состояло бы в том, чтобы сделать как [1 120] предложенный orsogufo: перезапись пользовательской переменной CXXFLAGS в [1 112]. Я отговорил бы от него, потому что это побеждает одну из функций Системы сборки GNU: пользователям разрешают переопределить эту переменную в [1 113] разовый. Например, можно хотеть к типу

make CXXFLAGS='-O0 -ggdb' 

при отладке части кода, и это перезапишет любое определение CXXFLAGS (но не те, которые в [1 115]). Честно говоря, большинство проектов не удается поддерживать это правильно, потому что они выделывают фокусы с [1 116].

Наконец, я должен упомянуть, что -fpic, -Wall, и -Werror не портативные опции. В зависимости от объема Вашего проекта можно хотеть добавить, настраивают проверку на них (, gnulib недавно получил новые макросы к тестам для флагов предупреждений, и , libtool может использоваться для создания совместно использованных библиотек).

26
ответ дан 30 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: