Документация к Autools на
blockquote>AC_COMPILE_IFELSE
[...], как обычно, жалкая. Здесь не обсуждается тема и не приводятся примеры.Хотя эта отдельная страница не содержит подробных сведений, она является частью более крупного руководства, которое содержит более подробные сведения и некоторые соответствующие примеры в соседних разделах. Однако даже эта страница предлагает
AC_LANG_PROGRAM
в качестве подходящего средства для получения параметраinput
для этого макроса, а документация для этого макроса дает разумное представление об общей форме, которую он создает - фактическая исходный код программы, а не имя файла.Когда дело доходит до получения ответного удара, я предлагаю не быть преднамеренно в темноте. Даже если вы не находите документацию адекватной, по крайней мере, файл журнала
configure
(config.log
) должен содержать много информации о том, что именно не удалось и как. В случае сбоя, он покажет вам полный источник программы тестирования, которую он использовал, команды, которые он выполнил, чтобы фактически выполнить тест, и любую выполненную диагностику.Например, используя скрипт configure, полученный из этого
configure.ac
, вдохновленного вашими примерами ...AC_INIT([test_test], [0.0.1]) AC_CONFIG_SRCDIR([test_src/test_cxx.cxx]) AC_PROG_CXX CXXFLAGS="-msse2" AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS and Foo Bar]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([`cat test_src/test_cxx.cxx`])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])] ) AC_OUTPUT
... Я получаю результат ошибки с соответствующим выводом в журнале:
blockquote>configure:2891: gcc -o conftest -g -O2 conftest.c >&5 conftest.c:9:18: fatal error: string: No such file or directory #include
^ compilation terminated. configure:2891: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "test_test" | #define PACKAGE_TARNAME "test_test" | #define PACKAGE_VERSION "0.0.1" | #define PACKAGE_STRING "test_test 0.0.1" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | /* end confdefs.h. */ | #include | int main(int argc, char* argv[]) | { | unsigned int x=0; | return x; | } | int | main () | { | | ; | return 0; | } configure:2895: result: no Это показывает, что исходный код действительно читается из внешнего файл, и это также выявляет две ключевые проблемы:
AC_LANG_PROGRAM
предоставляет больше, чем вы хотите в этом случае (в соответствии с его документацией). На самом деле, вам это вообще не нужно, если вы предоставляете полный исходный текст для тестовой программы.Тестовая программа компилируется и связывается как программа на C, но ее источником является C ++. Это значение по умолчанию задокументировано в руководстве .
Проблема (1) может быть решена просто путем подачи источника напрямую в
AC_LINK_IFELSE
, без переноса его черезAC_LANG_PROGRAM
, но в этом случае Autoconf предупредит о невидимостиAC_LANG_SOURCE
. Достаточно удобным решением этого является использованиеAC_LANG_SOURCE
напрямую, а неAC_LANG_PROGRAM
. Однако это добавит некоторый дополнительный#defines
к предоставленному источнику, который может вас не устраивать. Если вы не хотите этого, то я думаю, что в этом случае будет безопасно игнорировать предупреждения.Проблема (2) может быть решена с помощью макроса
AC_LANG
, чтобы сообщить Autoconf, что тест должен выполняться с использованием компилятора C ++ и соответствующих переменных Autotools для флагов C ++.Таким образом, если я обновлю свой
configure.ac
доAC_INIT([test_test], [0.0.1]) AC_CONFIG_SRCDIR([test_src/test_cxx.cxx]) AC_PROG_CXX AC_LANG([C++]) CXXFLAGS="-msse2" AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS and Foo Bar]) AC_LINK_IFELSE( [AC_LANG_SOURCE([`cat test_src/test_cxx.cxx`])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])] ) AC_OUTPUT
, то мой запуск конфигурации завершится успешно, и в журнале я вижу, что успешно выполненная команда компиляции была
blockquote>configure:2296: g++ -o conftest -msse2 conftest.cpp >&5
. То есть он компилировался с использованием выбранного компилятора C ++, с использованием флагов, как указано в
CXXFLAGS
, и соответствующим образом называл исходный файл теста для компиляции как C ++.
Да, это возможно. Вот некоторое общее описание. Я использовал Birt в серверной среде, хотя насколько я знаю, существует интерфейс RenderContext, через который Вы представляете свои отчеты в способе, которым Вы хотите.
Существует время выполнения BIRT, которое позволяет Вам генерировать отчеты из командной строки. Прочитайте эту статью. Это позволит Вам использовать BIRT без сервера. Первоначально отмеченный здесь как ответ на мой собственный вопрос.
Да, это возможно. Я использовал его в проекте, который я сделал приблизительно 1-2 года назад, таким образом, я должен буду возвратиться к Вам с деталями. (Хотя вещи, возможно, изменились с тех пор),
Вот плагины, в которых я нуждался:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="JUNIT_SRC_HOME/junitsrc.zip"/>
<classpathentry kind="lib" path="lib/log4j-1.2.14.jar"/>
<classpathentry kind="lib" path="lib/swt.jar"/>
<classpathentry kind="con" path="SWT_CONTAINER"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.device.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.device.swt_2.1.1.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.engine_2.1.2.v20070205-1728.jar" sourcepath="C:/Programme/eclipse/plugins/org.eclipse.birt.chart.source_2.2.0.v20070209/src"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.engine.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.runtime_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.core_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.common_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.ecore_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="org.eclipse.emf.ecore.xmi_2.2.1.v200609210005.jar"/>
<classpathentry kind="lib" path="js.jar"/>
<classpathentry kind="lib" path="com.ibm.icu_3.4.5.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.ui_2.1.1.v20070205-1728.jar"/>
<classpathentry kind="lib" path="org.eclipse.birt.chart.ui.extension_2.1.2.v20070205-1728.jar"/>
<classpathentry kind="lib" path="lib/hsqldb.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
If your desktop application is written using the Eclipse Rich Client Platform (RCP) it is trivial to add reporting. All you need to do is add the org.eclipse.birt.viewer plugin and then use it.
Here is an article that explains it: http://digiassn.blogspot.com/2008/08/birt-launch-birt-rcp-application.html