Вызов функции библиотеки C / C ++ из Как отправить -std = c + 11 в компилятор

Я строю расширение C ++ для PHP, используя шаблон config.m4 из эта почта а также Эта статья.

Мне нужно использовать C ++ 11 в стандарте для компиляции моих классов, поэтому я использовал предложение EXTRA_FLAGS как:

EXTRA_FLAGS="-std=c++11"

в моем config.m4. Финальный код:

PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[  --enable-vehicles      Enable "vehicles" extension support])

if test $PHP_VEHICLES != "no"; then
EXTRA_FLAGS="-std=c++11"PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi

Это не работает вообще (компилятор не получает дополнительные флаги). Затем я предполагаю, что этот параметр EXTRA_FLAGS связан не с компилятором, а со сценарием ….

Как я могу отправить флаг компилятору g ++, чтобы он использовал C ++ 11?

Спасибо за помощь.

5

Решение

Это решение не работает для меня. (С расширением PHP7)
Я нашел другое решение

if test $PHP_VEHICLES != "no"; then
CXXFLAGS="-std=c++11"PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi

Так что в основном единственное изменение CXX_FLAGS="-std=c++0x" изменить на CXXFLAGS="-std=c++11"

2

Другие решения

Я нашел решение. Вот окончательный код:

PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[  --enable-vehicles      Enable "vehicles" extension support])

if test $PHP_VEHICLES != "no"; then
CXX_FLAGS="-std=c++0x"PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi

Убедитесь, что CXX_FLAGS идет раньше PHP_REQUIRE_CXX() иначе это не сработает.

Существует также макрос под названием X_CXX_COMPILE_STDCXX_11([noext], [mandatory]) чей код Вот это автоматизирует этот процесс.

1