Для моего проекта (библиотеки) я использую configure с libtool и automake для сборки под Linux-хостами. Библиотека состоит из C API, а также дополнительного расширения C++. Таким образом, поскольку AC_PROG_CXX должен называться глобально, я использую AutoMake условными:Отключение поддержки cxx для libtool после вызова AC_PROG_CXX
*configure.ac*:
AC_PROG_CC
AC_PROG_CXX
AM_PROG_AR
LT_INIT
... some tests to figure out 'build_cxx' ...
AC_CONDITIONAL([CXX], [ test x$build_cxx = xyes ])
И внутри Makefile.am
sources = files.c
if CXX then
cxx_sources = files.cpp
else
cxx_sources =
endif
sources = $sources $cxx_sources
Все дело, однако, не работает, если настроить не в состоянии определить местонахождение g ++ (который практически убивает дополнительную логику для расширения C++). После некоторых исследований я пришел к выводу, что AC_PROG_CXX каким-то образом сообщает libtool предположить, что поддержка C++. Я также был удивлен, осознав, что если AC_PROG_CXX терпит неудачу, он устанавливает CXX в «g ++» !!!
В любом случае вызов AC_PROG_CXX условно создает ошибки, такие как «am_fastdepCXX никогда не определяется», что кажется мне логичным. Хуже всего то, что ошибка не отображается во время работы configure, но она появляется позже на этапе связывания в форме «неизвестной опции libtool -o
» (ouch).
Полный исходный код можно найти здесь ->http://bitbucket.org/sdlu/sdlu/src
Может кто-нибудь мне помочь?
Заранее спасибо ...
Спасибо за ваш ответ, первая работа вокруг (изменение команды LINK) работал отлично для меня. Что касается примечаний: – neoaggelos
** 1-2 **: я решил добавить сгенерированные файлы, чтобы избежать общей проблемы с разными несовместимыми версиями autotools ** 3 **: эти макросы внутренне используют pkg-config и fallback к соответствующим сценариям (sdl2-config) ** 4 **: Это исправлено в последней версии, спасибо за примечание ** 5 **: Я бы хотел этого избежать и использовать его только в крайнем случае, главным образом потому, что я также поддерживать системы сборки на основе CMake и premake. Еще раз спасибо! – neoaggelos
Тем не менее, сгенерированные файлы не принадлежат репозиторию. Когда вы делаете «make dist-gzip» для создания tarball, все будет упаковано, так что пользователю не нужен autoconf/automake. Я один из поддерживающих ODE, если вы хотите посмотреть наше репо: http://sourceforge.net/p/opende/code/HEAD/tree/trunk/ – DanielKO