Показаны сообщения с ярлыком Разработка. Показать все сообщения
Показаны сообщения с ярлыком Разработка. Показать все сообщения

вторник, 5 января 2021 г.

cmake и wxwidgets на archlinux

Так уж получается, что потянуло меня опять по ряду причин на WxWidgets. Системой моей по-прежнему является ArchLinux, а для сборки программ я предпочитаю cmake. Подготовил файлы, запускаю

cmake -G "Unix Makefiles"

и получаю сообщение об ошибке

Расследование привело меня к файлу /usr/lib/wx/config/gtk3-unicode-3.0, на который есть символическая ссылка в /usr/bin. Вот только называется файл-ссылка wx-config-gtk3, а cmake хотел просто wx-config.

Решение проблемы:

sudo ln -s /usr/lib/wx/config/gtk3-unicode-3.0 /usr/bin/wx-config

И наш 

cmake -G "Unix Makefiles"

теперь отрабатывает без ошибок.

пятница, 12 августа 2016 г.

ICU for Windows (MinGW)

Для одного из проектов мне потребовался драйвер qsqlite с поддержкой icu. Разумеется, для пересборки драйвера мне, в данном случае, потребовались также и сами библиотеки icu, которые, ввиду отсутствия необходимых бинарников, пришлось собирать из исходников.
Для тех, кто под Windows тоже использует gcc, я решил выложить бинарники icu на sourceforge. Пожалуйста, пользуйтесь.

воскресенье, 19 января 2014 г.

Минимальная конфигурация cmake для приложения на wxWidgets (GNU/Linux)

wxWidgets. Интересная библиотека и мне давно хотелось попробовать с ней поработать. А с чего начать, как не с "hello world"? На официальном сайте проекта есть пример простого приложения с использованием wxWidgets. Поместив код в файл main.cpp попробуем его скомпилировать. Для генерации Makefile будем использовать cmake со следующей конфигурацией.
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

set(APP_NAME wxhello)
set(APP_VERSION "0.1.0")

project(${APP_NAME})

set(CMAKE_BUILD_TYPE RELEASE)
set(EXECUTABLE_OUTPUT_PATH "bin")

set(
    HEADERS
)

set(
    SOURCES
    main.cpp
)

find_package(wxWidgets REQUIRED core base)
include(${wxWidgets_USE_FILE})

add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES})
target_link_libraries(
    ${PROJECT_NAME}
    ${wxWidgets_LIBRARIES}
)
Затем, как обычно, выполняем cmake -G "Unix Makefiles", make и любуемся результатом в каталоге bin.

При написании файла CMakeLists.txt мне помогла эта заметка: http://accountingplusplus.blogspot.ru/2010/12/cmake-wxwidgets.html

вторник, 29 октября 2013 г.

Конфигурация cmake для проекта на C++ с использованием boost

Задача стояла следующая. Есть кроссплатформенный проект на C++ (назовем его, к примеру, boost_test), который использует библиотеки boost (для примера, boost-filesystem). Используемый компилятор - gcc. Необходимо сформировать файл CMakeLists.txt, обеспечив статическое связывание проекта с нужными библиотеками boost и gcc в среде windows и динамическое в GNU/Linux. А заодно и освоить cmake, к которому давно приглядывался.

В результате, CMakeLists.txt получился следующим.
cmake_minimum_required(VERSION 2.8)

project(boost_test)
set(APP_NAME boost_test)
set(CMAKE_BUILD_TYPE RELEASE)

aux_source_directory(src SRC_LIST)

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -W -pedantic")

if(MINGW)
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_SHARED_LIBS OFF)
else()
    set(Boost_USE_STATIC_LIBS OFF)
    set(Boost_USE_SHARED_LIBS ON)
endif()
find_package(Boost COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()
if(MINGW)
    set(BUILD_STATIC_LIBS ON)
    set(BUILD_SHARED_LIBS OFF)
    set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
else()
    set(BUILD_STATIC_LIBS OFF)
    set(BUILD_SHARED_LIBS ON)
endif()

add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(
    ${PROJECT_NAME}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_LIBRARIES}
)

Вдогонку, привожу несколько ссылок с неплохим, на мой взгляд, введением в cmake:
Хм.. И почему вот эти последние заметки не попались мне до того, как я закончил свой конфиг? Было бы куда проще, черт возьми )

воскресенье, 16 июня 2013 г.

ПО с использованием Qt. Создание файла перевода на этапе сборки

При создании приложений с использованием фреймворка Qt, графический интерфейс пользователя которых переведен на несколько языков, встает вопрос об автоматизации создания файла перевода (*.qm) на этапе сборки проекта.
Приведенный ниже кусок кода файла проекта содержит следующие указания для утилиты qmake: каталог размещения файла *.ts, содержащего перевод элементов GUI в формате xml, каталог назначения, где будет размещена скомпилированная программа и куда замет следует скопировать файл перевода интерфейса, а также набор инструкций, обеспечивающий генерацию файла *.qm из *.ts и копирование созданного файла в каталог назначения.
...
TRANSLATIONS = translations/myprogram_ru.ts
...
DESTDIR = ../myprogram-bin
...
updateqm.input = TRANSLATIONS
updateqm.output = myprogram_ru.qm
updateqm.commands = lrelease myprogram.pro && $(COPY) translations/*.qm ${DESTDIR}
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm

среда, 5 июня 2013 г.

Релиз Qwt 6.1

Состоялся релиз библиотеки виджетов и вспомогательных классов для визуализации числовых данных Qwt 6.1. О возможностях библиотеки можно узнать со страницы проекта на sourceforge: http://qwt.sourceforge.net/, а о нововведениях версии 6.1 - в официальном changelog: http://qwt.sourceforge.net/qwtchangelog.html.

воскресенье, 2 июня 2013 г.

Приложение с использованием Qt5. Необходимые библиотеки для работы в чистой Windows

Итак, написано приложение с использованием Qt5. В GNU/Linux, как обычно, все хорошо, все на месте, все прекрасно работает. Собираем свою программу в Windows и встает вопрос ее распространения для этого класса операционных систем. Какие библиотеки должны идти вместе с программой, чтобы она работала у любого пользователя на любом варианте Windows? Разумеется, что все зависит от использованных в программе модулей Qt5, поэтому я просто приведу пример для одного из своих проектов, читателю же, ориентируясь на приведенный список, придется сделать по аналогии. Список при использовании Qt 5.0.2 и release сборке проекта получился следующий.
platforms/qminimal.dll
platforms/qwindows.dll
D3DCompiler_43.dll
icudt49.dll
icuin49.dll
icuuc49.dll
libEGL.dll
libgcc_s_sjlj-1.dll
libGLESv2.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

UPD 08.09.2013

После перехода на Qt 5.1.1, список необходимых библиотек несколько изменился.
platforms/qminimal.dll
platforms/qwindows.dll
printsupport/windowsprintersupport.dll
icudt51.dll
icuin51.dll
icuuc51.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

среда, 15 февраля 2012 г.

Повседневные вопросы и их решения на C++

Планирую начать публикацию коротких заметок с решениями различных, скажем так, подзадач, с которыми может столкнуться инженер, при использовании C++ в своей работе - при создании расчетных приложений и обработке экспериментальных данных. Надеюсь, что кому-нибудь найденные мной решения пригодятся, а в комментариях, возможно, будут предложены более эффективные способы. Будем делиться опытом )

среда, 1 февраля 2012 г.

Распараллеливание сборки проекта

Для повышения эффективности сборки проекта путем ее распараллеливания необходимо запускать make с ключом -jX, где X - количество процессоров в системе плюс один.
В Qt Creator это указывается в разделе Проекты -> Этапы сборки -> Сборка -> Подробнее -> Параметры make.
Говорят, что в виндовсах этого мало и нужно еще использовать ключ -f Makefile.Release (или Makefile.Debug).

Подробности см. здесь.

среда, 11 января 2012 г.

makeself

В ходе дискуссии пришли к выводу, что для разработчика ПО наиболее оптимальным способом распространения своих разработок, в частности для GNU/Linux, является самораспаковывающийся архив (разумеется, плюс архив с исходными кодами при соответствующей лицензии). Такой подход можно увидеть, например, у nvidia с ее видео драйверами. Получается весьма удобно. И разработчику, и пользователю. Мантейнерам при этом ничто не мешает создать дистрибутивный пакет, будь то свободное ПО (исходные коды доступны) или проприетарное (взял и перепаковал run в pkg.tar.xz или deb с учетом специфики конкретного дистрибутива).
Так вот. Для создания таких самораспаковывающихся архивов используется makeself, найти который можно, помимо репозиториев любимого дистрибутива, на github-е. А если что не понятно, но на youtube есть видео с объяснениями как с ним работать.