Я разрабатываю приложение, используя wxWidgets для пользовательского интерфейса. Проект может быть нацелен на Windows и Linux, я использую meson / ninja для сборки.
Сборка в целом работает нормально для обеих платформ, если я не использую Resource (.r c) файл в Windows.
Когда я добавляю файл .r c, он не компилируется. Я использую MSYS2 / mingw_w64 на Windows в качестве набора инструментов.
В целях тестирования я создал небольшой пример для тестирования и воспроизведения.
В этом примере используются следующие файлы:
- cpp -файл с некоторыми тестовыми кодами wxWidgets «Hello World».
- .r c -файл , определяя тему и приложение для windows.
- meson.build-file, конфигурацию для meson
- Некоторые файлы значков
Я запускаю следующую команду из в интерфейсе командной строки MSYS2-MINGW64 в Windows:
meson build_win && cd build_win && ninja
Некоторые файлы / папки создаются, но процесс сборки завершается неудачно. Вывод из терминала:
The Meson build system
Version: 0.53.0
Source dir: //192.168.122.1/VMShare_1/Tests/meson-test
Build dir: //192.168.122.1/VMShare_1/Tests/meson-test/build_win
Build type: native build
Project name: TestWXApp
Project version: undefined
C compiler for the host machine: cc (gcc 9.2.0 "cc (Rev2, Built by MSYS2 project) 9.2.0")
C linker for the host machine: cc GNU ld.bfd 2.33.1
Host machine cpu family: x86_64
Host machine cpu: x86_64
C++ compiler for the host machine: c++ (gcc 9.2.0 "c++ (Rev2, Built by MSYS2 project) 9.2.0")
C++ linker for the host machine: c++ GNU ld.bfd 2.33.1
wx-config found: YES (sh C:\msys64\mingw64\bin/wx-config) 3.0.4
Run-time dependency WxWidgets found: YES 3.0.4
Windows resource compiler: GNU windres (GNU Binutils) 2.33.1
Build targets in project: 2
Found ninja.EXE-1.9.0 at C:\msys64\mingw64\bin/ninja.EXE
[1/3] Generating Windows resource for file '._resources_theme_win32.rc' with a custom command.
FAILED: ._resources_theme_win32.rc_theme_win32.o
"C:/msys64/mingw64/bin/windres.EXE" ".././resources/theme_win32.rc" "._resources_theme_win32.rc_theme_win32.o" "--preprocessor-arg=-MD" "--preprocessor-arg=-MQ._resources_theme_win32.rc_theme_win32.o" "--preprocessor-arg=-MF._resources_theme_win32.rc_theme_win32.o.d"
.././resources/theme_win32.rc:2:10: fatal error: wx/msw/wx.rc: No such file or directory
2 | #include "wx/msw/wx.rc"
| ^~~~~~~~~~~~~~
compilation terminated.
C:/msys64/mingw64/bin/windres.EXE: preprocessing failed.
[2/3] Compiling C++ object TestWXApp@exe/src_wxExample.cpp.obj.
ninja: build stopped: subcommand failed.
Похоже, мне нужно добавить зависимость wxWidgets для компилятора ресурсов, но я не понимаю, как.
meson.build:
project('TestWXApp', 'c')
add_languages('cpp', required : true)
src_data = []
if build_machine.system() == 'windows'
#compile static wxWidgets on windows
wxDep = dependency('wxwidgets',
version : '>=3.0.0',
required : true,
modules : ['--static', 'std', 'stc'])
mod_rescomp = import('windows')
src_data += mod_rescomp.compile_resources('./resources/theme_win32.rc')
else
#build for linux
wxDep = dependency('wxwidgets',
version : '>=3.0.0',
required : true,
modules : ['std', 'stc'])
endif
src_data += ['./src/wxExample.cpp']
inc_tool = include_directories('./src')
inc_res = include_directories('./resources')
executable('TestWXApp',
sources : [src_data],
include_directories : [inc_res],
dependencies : wxDep)
Я поместил тарбол, включая весь Проект (+ сгенерированная папка build_win) здесь: https://lots-of.space/s/NLqmJzjcrknKqbX
Если требуется дополнительная информация, дайте мне знать , Я надеюсь, что кто-то может указать мне правильное направление.
С уважением,
XXXBold
Обновление, 26.01.2020
I Теперь я могу построить проект, однако сейчас требуются жестко заданные пути. Я нашел эти пути, запустив wx-config в терминале и вручную скопировав вывод:
wx-config --cppflags --static
Документация для компилятора ресурсов на meson может быть найдена здесь: https://mesonbuild.com/Windows-module.html#page -описание
Новый файл meson.build:
project('TestWXApp', 'c')
add_languages('cpp', required : true)
src_data = []
if build_machine.system() == 'windows'
#compile static wxWidgets on windows
wxDep = dependency('wxwidgets',
version : '>=3.0.0',
required : true,
modules : ['--static', 'std', 'stc'])
mod_rescomp = import('windows')
src_data += mod_rescomp.compile_resources('./resources/theme_win32.rc',
args : ['-IC:/msys64/mingw64/lib/wx/include/msw-unicode-static-3.0',
'-IC:/msys64/mingw64/include/wx-3.0',
'-D_FILE_OFFSET_BITS=64',
'-D__WXMSW__'])
else
#build for linux
wxDep = dependency('wxwidgets',
version : '>=3.0.0',
required : true,
modules : ['std', 'stc'])
endif
src_data += ['./src/wxExample.cpp']
inc_tool = include_directories('./src')
inc_res = include_directories('./resources')
executable('TestWXApp',
sources : [src_data],
include_directories : [inc_res],
dependencies : wxDep)
Я уверен, что есть лучший способ сделать это ...