Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,694
Записей в блоге: 9

Хочется собирать проект с wxWidgets c помощью cmake

02.09.2025, 07:22. Показов 3138. Ответов 22

Студворк — интернет-сервис помощи студентам
Привет всем.

Задумываю кроссплатформенное приложение (минимум windows,linux) c использованием wxWidgets.
Установил на win10 msys2, в него gcc,g++,gdb, mingw32-make.exe, в общем всё что требуется для сборки.
Тут набрёл на Сборка из исходников wxWidgets под Windows, используя MinGW и makefile
где Royal_X подробно описывает как собрать wxWidgets.
Собрал как он написал. Только я все программы и пакеты которые норовят в корень установится ставлю в Диск:\prog\, ну такая у меня привычка, не хочу корень засорять.

Скопировал один из простых примеров, состоящий из одного cpp файла из C:\prog\wxWidgets-3.3.1\samples\uiaction\ в другой каталог, скопировал имеющийся в другом примере CMakeLists.txt.
Установил CMake последней версии, 4.1.1.
Подстругал CMakeLists.txt под данный пример
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
C:\samples\wxWidgets\uiaction>cmake CMakeLists.txt
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.
CMake Error at CMakeLists.txt:3 (project):
  Failed to run MSBuild command:
 
    C:/Program Files/Microsoft Visual Studio/2022/Community/MSBuild/Current/Bin/amd64/MSBuild.exe
 
  to get the value of VCTargetsPath:
 
    Версия MSBuild 17.9.5+33de0b227 для .NET Framework
    Сборка начата 02.09.2025 7:01:25.
 
    Проект "C:\samples\wxWidgets\uiaction\CMakeFiles\4.1.1\VCTargetsPath.vcxproj" в узле 1 (целевые объекты по умолчанию).
    C:\samples\wxWidgets\uiaction\CMakeFiles\4.1.1\VCTargetsPath.vcxproj(15,2): error MSB4019: импортированный проект "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props" не найден. Проверьте правильность выражения в объявлении Import "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props" и наличие файла на диске.
    Сборка проекта "C:\samples\wxWidgets\uiaction\CMakeFiles\4.1.1\VCTargetsPath.vcxproj" завершена (целевые объекты по умолчанию) с ошибкой.
 
    Ошибка сборки.
 
    "C:\samples\wxWidgets\uiaction\CMakeFiles\4.1.1\VCTargetsPath.vcxproj" (целевой объект по умолчанию) (1) ->
      C:\samples\wxWidgets\uiaction\CMakeFiles\4.1.1\VCTargetsPath.vcxproj(15,2): error MSB4019: импортированный проект "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props" не найден. Проверьте правильность выражения в объявлении Import "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props" и наличие файла на диске.
 
        Предупреждений: 0
        Ошибок: 1
 
    Прошло времени 00:00:00.16
 
 
  Exit code: 1

- пытается использовать сборку от VS 2022. Да, она тоже есть, но мне нужно собирать с помощью gcc, пока под win, потом хочу попробовать кросс компиляцию для linux.

Как CMake заставить использовать gcc не знаю. Указывал
Code
1
set(wxWidgets_CONFIGURATION mswu)
Думал оно, нет, не помогает.
Привожу для краткости CMakeLists.txt с удалёнными ветками для других ОС
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmake_minimum_required(VERSION 3.5...4.1)
 
project(uiaction)
 
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
set(wxWidgets_CONFIGURATION mswu)
find_package(wxWidgets 3.3 REQUIRED COMPONENTS core base OPTIONAL_COMPONENTS net)
include(${wxWidgets_USE_FILE})
 
set(SRC_FILES
    uiaction.cpp
)
 
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE ${SRC_FILES})
target_link_libraries(${PROJECT_NAME} wxWidgets::wxWidgets)
Так же прилагаю исходный CMakeLists.txt из C:\prog\wxWidgets-3.3.1\samples\minimal\
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#############################################################################
# Name:        samples/minimal/CMakeListst.txt
# Purpose:     Sample CMake file to show usage of cmake for wxWidgets users
# Author:      Tobias Taschner
# Created:     2016-10-23
# Copyright:   (c) 2016 wxWidgets development team
# Licence:     wxWindows licence
#############################################################################
 
#
# This file is just a sample to show using cmake from an application
# If you want to build the minimal and other samples please use the
# wxBUILD_SAMPLES option when using cmake on the library
#
 
# Declare the minimum required CMake version
cmake_minimum_required(VERSION 3.5...3.31)
 
if(APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
    # If no deployment target has been set default to the minimum supported
    # OS version (this has to be set before the first project() call)
    if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
        set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0 CACHE STRING "iOS Deployment Target")
    else()
        set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10 CACHE STRING "macOS Deployment Target")
    endif()
endif()
 
# Name the project
project(minimal)
 
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
# Request the required wxWidgets libs
find_package(wxWidgets 3.3 COMPONENTS core base REQUIRED CONFIG)
 
# Define a variable containing a list of source files for the project
set(SRC_FILES
    minimal.cpp
)
 
if(WIN32)
    # Include a RC file for windows
    list(APPEND SRC_FILES ../sample.rc)
elseif(APPLE)
    # Add an icon for the apple .app file
    list(APPEND SRC_FILES ../../src/osx/carbon/wxmac.icns)
endif()
 
# Define the build target for the executable
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE ${SRC_FILES})
# Link executable to the wxWidgets target
target_link_libraries(${PROJECT_NAME} wxWidgets::wxWidgets)
 
if(MSVC)
    # Use manifest from wx.rc
    set_target_properties(${PROJECT_NAME} PROPERTIES
        COMPILE_FLAGS "/DwxUSE_RC_MANIFEST"
        LINK_FLAGS "/MANIFEST:NO"
    )
elseif(APPLE)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        RESOURCE "../../src/osx/carbon/wxmac.icns"
        MACOSX_BUNDLE_ICON_FILE wxmac.icns
        MACOSX_BUNDLE_COPYRIGHT "Copyright wxWidgets"
        MACOSX_BUNDLE_GUI_IDENTIFIER "org.wxwidgets.minimal"
    )
endif()


Ошибку см. выше.

Поставил Code::Blocks, настроил как Royal_X написал. Code::Blocks создал проект заготовку, она удачно собралась и выполнилась.
Я сохранил лог выполнения Code::Blocks сборки
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall -g -IC:\prog\wxWidgets-3.3.1\include -IC:\prog\wxWidgets-3.3.1\lib\gcc_lib\mswu -c C:\samples\wxWidgets\Tst1\GUIDialog.cpp -o obj\Debug\GUIDialog.o
windres.exe -IC:\prog\wxWidgets-3.3.1\include -IC:\prog\wxWidgets-3.3.1\lib\gcc_lib\mswu  -J rc -O coff -i C:\samples\WXWIDG~1\Tst1\resource.rc -o obj\Debug\resource.res
g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall -g -IC:\prog\wxWidgets-3.3.1\include -IC:\prog\wxWidgets-3.3.1\lib\gcc_lib\mswu -c C:\samples\wxWidgets\Tst1\Tst1App.cpp -o obj\Debug\Tst1App.o
g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -Wall -g -IC:\prog\wxWidgets-3.3.1\include -IC:\prog\wxWidgets-3.3.1\lib\gcc_lib\mswu -c C:\samples\wxWidgets\Tst1\Tst1Main.cpp -o obj\Debug\Tst1Main.o
g++.exe -LC:\prog\wxWidgets-3.3.1\lib\gcc_lib -o bin\Debug\Tst1.exe obj\Debug\GUIDialog.o obj\Debug\Tst1App.o obj\Debug\Tst1Main.o  obj\Debug\resource.res -mthreads  -lwxmsw33u_xrc -lwxbase33u_xml -lwxmsw33u_adv -lwxmsw33u_html -lwxmsw33u_core -lwxbase33u -lwxpng -lwxjpeg -lwxtiff -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 -lwsock32 -lshlwapi -lversion -loleacc -luxtheme -lgdiplus -lmsimg32 -mwindows


не суть важно из каких файлов состоит проект, это просто заготовка приложения.
Главное: 1 - wxWidgets успешно установлен и собирается под win (статическая линковка). 2 - нужно теперь сделать CMakeLists.txt под этот проект чтобы собирать вне Code::Blocks-а.

Вы спросите зачем, если Code::Blocks собирает? Дык, я хочу использовать VS Code что бы всему обмазаться AI, MCP, а может даже и RAGами. В общем, не впечетляет совсем Code::Blocks, времена VS 2005 вспоминаются. Не суть.

Резюме: помогите кто ни будь сделать годный CMakeListst.txt что бы собирать проекты хотя бы под win, а лучше нормальный, кроссплатформенный скрипт. Я его буду в другие проекты копировать
В SRC_FILES уж как ни будь дополнительные файлы допишу.

gcc и пр. стоят в C:/prog/msys64/ucrt64/bin и эта директория в PATH.
C:\Program Files\CMake\bin\ тоже в PATH.

Пусть даже пути жёстко будут прописаны если не выйдет с find_package(wxWidgets ... , я на всё согласный.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2025, 07:22
Ответы с готовыми решениями:

cmake.exe как собирать проекты?
Качнул я опробовать вот это https://github.com/lastfm/liblastfm. Там внутри какой-то страшный...

CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM
Установил CMake. Здесь находится mingw D:\ProgramFiles\Qt\Tools\MinGW\bin mingw32-make.exe(путь в...

CMake в принципе не воспринимает никакие команды, кроме cmake --help
Здравствуйте! Пытаюсь назначить Cmake компилятор, который он должен использовать, для этого пишу...

22
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6336 / 3068 / 1054
Регистрация: 01.06.2021
Сообщений: 11,747
02.09.2025, 20:47
Студворк — интернет-сервис помощи студентам
Curry, прикольно то, что в папке build в проекте появляется файл compile_commands.json, в котором ты можешь увидеть, что будет происходить. Так сказать, можно убедиться, что правильный компилятор и что правильные опции передаются компилятору.
Это то, о чем говорил alecss131 - т.е. что CMake создает json, а потом уже VSCode с ним работает.

Например, у меня есть простенький CMakeLists.txt для консольного приложения. По сути, там ничего сложного нет. Я прописал самые нужные мне опции, а также прописал, чтобы exe создавался не в папке build (дефолтно это так), а в папке bin в проекте.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cmake_minimum_required(VERSION 3.12)
project(CMakeConsoleApp VERSION 1.0.0 LANGUAGES CXX)
 
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
 
add_executable(${PROJECT_NAME} main.cpp)
 
set_target_properties(${PROJECT_NAME} PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin
    OUTPUT_NAME ${PROJECT_NAME}
)
 
target_compile_options(${PROJECT_NAME} PRIVATE
    # Common flags for all build types
    -fdiagnostics-color=always
    -Wall
    -Wextra
    -pedantic-errors
    -static
)
 
target_compile_options(${PROJECT_NAME} PRIVATE
    $<$<CONFIG:Debug>:-g>
    $<$<CONFIG:Release>:-O2 -s>
)
И что самое интересное, я когда открыл compile_commands.json, то заметил, что CMake от себя тоже добавляет компилятору опции, кроме моих.
При Release он от себя добавляет -O3 -DNDEBUG, а при Debug добавляет -g.
Т.е. получается, что несмотря на то, что я просил, чтобы в Release был -О2, он лепит в начале -О3. Но это не страшно, поскольку компилятор GNU учитывает только последнюю O-опцию. Также само не страшно иметь два -g при отладке.

В любом случае, советую проверять compile_commands.json, чтобы быть уверенным, что компиляция пройдет так, как нужно.
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6336 / 3068 / 1054
Регистрация: 01.06.2021
Сообщений: 11,747
02.09.2025, 21:00
Curry, вот тут я переключаюсь между релизной и отладочными версиями



После переключения сразу же меняется compile_commands.json
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
02.09.2025, 21:08
Цитата Сообщение от Curry Посмотреть сообщение
А как ему указать компилятор пока не знаю.
Кому "ему"?

Добавлено через 5 минут
Я вот недавно создавал cmake проект в MSVC, и там для окружения и для указания компилятора использовался файл CMakePresets.json. (ко всему прочем что он дополнительно запускал из настроенного окружения msbuild, пути и прочее)
Это только для разработки. Для дистрибуции естественно он не нужен.

Но это так, к слову.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2025, 21:08

Qt creator. Не удается добавить стороннюю библиотеку в проект cmake (добавление в проект boost/algorithm)
Собственно, весь вопрос в заголовке. Осваиваю cmake, не могу подключить &quot;алгоритм&quot; из буст. ...

Как с помощью cmake собрать проект ?
Добрый день! Пытаюсь понять как с помощью cmake собрать проект, который написан через Qt. Цель -...

Проект на WxWidgets не запускается в конфигурации Release
Проект на WxWidgets v3.1.5 запускается в конфигурации Debug, но не запускается в конфигурации...

Cmake проект сборки документации
Здравствуйте, хочу сделать проект со сборкой документации, что-то типо doxygen target example. В...

Как собрать проект на CMAKE в Visual Studio
Простейший код файл TEST.cpp #include &lt;iostream&gt; using namespace std; int main() {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru