BIRT в настольном приложении

Документация к Autools на AC_COMPILE_IFELSE [...], как обычно, жалкая. Здесь не обсуждается тема и не приводятся примеры.

blockquote>

Хотя эта отдельная страница не содержит подробных сведений, она является частью более крупного руководства, которое содержит более подробные сведения и некоторые соответствующие примеры в соседних разделах. Однако даже эта страница предлагает 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

... Я получаю результат ошибки с соответствующим выводом в журнале:

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
blockquote>

Это показывает, что исходный код действительно читается из внешнего файл, и это также выявляет две ключевые проблемы:

  1. AC_LANG_PROGRAM предоставляет больше, чем вы хотите в этом случае (в соответствии с его документацией). На самом деле, вам это вообще не нужно, если вы предоставляете полный исходный текст для тестовой программы.

  2. Тестовая программа компилируется и связывается как программа на 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

, то мой запуск конфигурации завершится успешно, и в журнале я вижу, что успешно выполненная команда компиляции была

configure:2296: g++ -o conftest -msse2   conftest.cpp  >&5
blockquote>

. То есть он компилировался с использованием выбранного компилятора C ++, с использованием флагов, как указано в CXXFLAGS, и соответствующим образом называл исходный файл теста для компиляции как C ++.

10
задан bluish 29 September 2011 в 09:09
поделиться

4 ответа

Да, это возможно. Вот некоторое общее описание. Я использовал Birt в серверной среде, хотя насколько я знаю, существует интерфейс RenderContext, через который Вы представляете свои отчеты в способе, которым Вы хотите.

1
ответ дан 4 December 2019 в 00:27
поделиться

Существует время выполнения BIRT, которое позволяет Вам генерировать отчеты из командной строки. Прочитайте эту статью. Это позволит Вам использовать BIRT без сервера. Первоначально отмеченный здесь как ответ на мой собственный вопрос.

4
ответ дан 4 December 2019 в 00:27
поделиться

Да, это возможно. Я использовал его в проекте, который я сделал приблизительно 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>
2
ответ дан 4 December 2019 в 00:27
поделиться

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

5
ответ дан 4 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

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