Я строю расширение 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?
Спасибо за помощь.
Это решение не работает для меня. (С расширением 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"
Я нашел решение. Вот окончательный код:
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])
чей код Вот это автоматизирует этот процесс.