|
Модератор
|
||||||||||||||||||||||||||
Хочется собирать проект с wxWidgets c помощью cmake02.09.2025, 07:22. Показов 1748. Ответов 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 под данный пример Кликните здесь для просмотра всего текста
- пытается использовать сборку от VS 2022. Да, она тоже есть, но мне нужно собирать с помощью gcc, пока под win, потом хочу попробовать кросс компиляцию для linux. Как CMake заставить использовать gcc не знаю. Указывал
Привожу для краткости CMakeLists.txt с удалёнными ветками для других ОС
Кликните здесь для просмотра всего текста
Ошибку см. выше. Поставил Code::Blocks, настроил как Royal_X написал. Code::Blocks создал проект заготовку, она удачно собралась и выполнилась. Я сохранил лог выполнения Code::Blocks сборки Кликните здесь для просмотра всего текста
не суть важно из каких файлов состоит проект, это просто заготовка приложения. Главное: 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
|
||||||||||||||||||||||||||
| 02.09.2025, 07:22 | |
|
Ответы с готовыми решениями:
22
cmake.exe как собирать проекты? CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM CMake в принципе не воспринимает никакие команды, кроме cmake --help |
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
|||||||||||||||||||||
| 02.09.2025, 09:41 | |||||||||||||||||||||
Сообщение было отмечено Curry как решение
Решение
Curry, написание
CMakeLists.txt это всегда боль. Нужно быть прям экспертом CMake, чтобы суметь быстро написать данный файл для wxWidgets проекта. Но полагаю можно пойти по легкому пути. Сперва можно создать проект в Code::Blocks. Там можно полностью настроить свой проект через wizard, а также через настройки проекта. А потом можно попросить ИИ создать из *.cbp файла (это файл проекта Code::Blocks) файл CMakeLists.txt.Например, у меня был проект wxWidgets в Code::Blocks, который называется bin2cpp. Мой проект использует статическую линковку, предкомпилированные заголовки и только релизную сборку. Поэтому у тебя может быть иначе. Вот, что у меня вышло: CMakeLists.txt
.vscode/c_cpp_properties.json
CMakeLists.txt.А вот потом, когда проект уже будет настроен, то не составит труда вручную добавлять какие-то новые сорцы к CMakeLists.txt.
1
|
|||||||||||||||||||||
|
Заблокирован
|
||
| 02.09.2025, 10:49 | ||
|
Смотри документацию по своему cmake. cmake -G "MinGW Makefiles"
0
|
||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
|
| 02.09.2025, 11:10 | |
|
SmallEvil, ТС хочет использовать CMake в VS Code и настроить кроссплатформенный проект на wxWidgets. Это означает, что CMakeLists.txt нужен.
А вот кто что потом будет использовать это уже другая история. Из CMakeLists потом можно и Makefile создавать для GNU Make, можно и для Ninja, можно и проекты под студию создать и т.д.
0
|
|
|
Заблокирован
|
||||||
| 02.09.2025, 11:44 | ||||||
|
Я про то, что выбор используемого набора средств сборки производится не в cmakelists.txt. Тогда вопрос: при чем тут cmakelists.txt? Добавлено через 1 минуту Добавлено через 4 минуты Вопрос в контексте его ошибки. ТС хочет компилировать с помощью gcc, но средство сборки используется msbuild. Добавлено через 13 минут Вот например у меня под виндой: ![]()
C:\samples\wxWidgets\uiaction>cmake CMakeLists.txtОх уж эти специалисты негросетей...
0
|
||||||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
||
| 02.09.2025, 11:59 | ||
|
НО все равно в CMakeLists нужно учитывать разные сценарии. Обычно такие разные сценарии делают с помощью if. if(WIN32) if(APPLE) if(UNIX) if(MSVC) или if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") if(CMAKE_COMPILER_IS_GNUCXX) или if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") или if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") или if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") можно даже проверять версии if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "13.0") Почему это важно? Во-первых, для работы wxWidgets на винде мы подключаем виндовые библиотеки. Естественно на других платформах эти библиотеки не нужны. Во-вторых, разные компиляторы поддерживают разные опции. Даже если ТС хочет только под винду и только для "GNU", то все равно лучше об этом прописать и в CMakeLists. Сегодня он будет использовать g++, а завтра захочет MSVC. Лучше один раз написать нормальный CMakeLists, чем потом постоянно извращаться. К тому же, я как понял, он в будущем собирается и под другие платформы выпускать, иначе ему этот CMake не нужен был. Если нужна только одна ОС, то в VS Code с помощью одних JSON можно без проблем настроить wxWidgets проект и никакой CMake не нужен.
0
|
||
|
Модератор
|
|||
| 02.09.2025, 12:35 | |||
|
Вся суть cmake именно в этом, а если писать кучу всего для подключаемых библиотек, то суть cmake теряется. Добавлено через 1 минуту
0
|
|||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
|
| 02.09.2025, 12:47 | |
|
1
|
|
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
|||||||
| 02.09.2025, 12:50 | |||||||
|
Curry, оказалось с расширением VS Code для работы с CMake все еще проще. Не пришлось даже JSON файлы настраивать.
Всего лишь юзал CMakeLists.txt. Вот доказательство, что у меня четко все сработало. На скриншоте результат успешной компиляции wxWidgets проекта со статической линковкой. Использовал такой CMakeLists.txt. Этот файл писал ИИ. Не утверждаю, что там всё правильно, поскольку я не спец. в CMake. Но этот файл, по крайней мере, позволяет успешно собрать. Доказательство выше. Кликните здесь для просмотра всего текста
![]() Я лишь показал, как за пару минут можно быстро настроить и скомпилировать в VS Code. На этом я прощаюсь.
1
|
|||||||
|
Заблокирован
|
||
| 02.09.2025, 13:00 | ||
|
Royal_X, почему ты прицепился к VSCode?
1. CMake не умеет генерить под VSCоde. 2. ТС просто конфигурирует свой проект
0
|
||
|
Заблокирован
|
||
| 02.09.2025, 13:02 | ||
|
0
|
||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
|||||
| 02.09.2025, 13:07 | |||||
|
Но он пишет: И выше я выложил доказательство, что мой (а скорее, написанный ИИ) CMakeLists.txt рабочий.
0
|
|||||
|
Заблокирован
|
||
| 02.09.2025, 13:15 | ||
|
ИДЕ что бы скомпилировать проект на основе cmake, нужно сконфигурировать этот самый cmakelists.txt с помощью cmake с выбранным средством сборки и скомпилировать по нему. Я конечно немного далек от этого. Но не вижу чем cmakelists.txt в msvc/vscode/eclipse/notepad должен отличатся. Только вспомогательные json файлы могут отличаться, которые описывают окружение. Хотя это тоже часть CMAKE проекта.
0
|
||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
||||
| 02.09.2025, 13:32 | ||||
|
Добавлено через 4 минуты 1. Использовать проект на основе JSON файлов. Даже wxWidgets-проект можно без проблем собрать только на одних JSON. Тут пример: https://github.com/huckor/wxwi... ree/master Но недостаток такого подхода в том, что ты потом не сможешь использовать этот проект в других ide. или 2. Установить официальное расширение CMake Tools и потом настроить проект только через CMakeLists.txt. Второй способ применяется, когда в VS Code нужно работать со сложными кроссплатформенными проектами. ТС хочет именно второй вариант. То есть, ему нравится VS Code - и это неплохой выбор (IntelliSense и все прочее там шустрее, чем в студии), но в то же время он не хочет использовать проект на одних JSON. Добавлено через 9 минут В итоге, на создание пустого проекта в C::B у меня ушло менее минуты. Потом отправил *.cbp файл в промт ИИ. Получил CMakeLists.txt. Создал пустую папку проекта для VS Code. Скопировал автогенерированные сорцы из C::B проекта в эту папку и туда же кинул CMakeLists.txt. Вуаля. За пару минут собирается приложение на wxWidgets. Причем, для этого не нужно знать какие библиотеки подключать, не нужно смотреть на примеры кода для мин. приложения. C::B всё это делает за тебя. За пару минут у нас есть проект на VS Code с использование CMake, который полностью настроен, в котором уже есть минимальные сорцы и который без единой ошибки собирает приложение.
1
|
||||
|
Модератор
|
||||||||||||
| 02.09.2025, 14:08 | ||||||||||||
|
Я ради интереса собрал wxWidgets, у себя на винде под студией с помощью cmake, думаю на других ос и о=компиляторах отличий не будет. Собрал только статику и без предкомпилированных заголовков (в опциях есть такая возможность)
и в итоге получился вот такой CMakeLists.txt
Кликните здесь для просмотра всего текста
ну и минимальный пример
В этом файле CMAKE_PREFIX_PATH можно вынести в окружение среды либо в json настройки vscode, так же add_executable поместить в if которая будет определять ос, либо самому написать точку входа, а то без этого (WIN32) у меня прога с wxIMPLEMENT_APP писала ошибку что не найдена функция main (точка входа). подключал не wx/wxprec.h а простой wx/wx.hкомпилятор и прочее настраивается в json файлах у vscode Добавлено через 1 минуту Добавление WIN32 в add_executable меняет точку входа с main на WinMain
1
|
||||||||||||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
||
| 02.09.2025, 14:18 | ||
wxWidgetsConfig.cmakeа если у тебя только голая библиотека, всего две папке include и lib и нет этого файла, то так не будет работать. Выше я показал, как будет выглядеть CMakeLists.txt, когда нет этого файла. В любом случае, когда скачиваешь сорцы из официального сайта wxWidgets - там есть и примеры проектов на CMake, есть и этот конфиг. Проблем думаю не должно быть. Каждый волен делать, как ему больше нравится.
1
|
||
|
Модератор
|
||||||||||
| 02.09.2025, 15:19 [ТС] | ||||||||||
|
А альтернативы ему не знаю. Потом, глядя на makefile-ы оттуда же собрать проект хотя бы из одного файла в VS Code tasks.json
Линкер ругается, хотя всё тоже что используется при сборке wxWidgets. Пришлось ставить С::В, смотреть, как собирает он.
0
|
||||||||||
|
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
|
||
| 02.09.2025, 20:01 | ||
CMakeLists.txt, то VS Code спрашивает, какой компилятор использовать, выводя список:Ты сам выбираешь из этого списка нужный компилятор. Если ты случайно нажал за пределами списка и пропал фокус, а соответственно список, то не страшно. Нажимаешь правой кнопкой мыши на CMakeLists.txt и выбираешь Configure All Projects. Там же можно сменить компилятор через Clean Reconfigure All Projects.Так что, CMake ничего не выбирает, ты сам это делаешь. Другое дело, что раз ты компилировал wxWidgets из сорцов с помощью компилятора GNU, то значит и в твоем проекте потом должен использоваться этот компилятор. Если ты хочешь использовать MSVC, то и библиотеки wxWidgets должны быть собраны под MSVC. И, кстати, для использования wxWidgets необязательно самому собирать библиотеку из сорцов. Дело в том, что на сайте wxWidgets в разделе Binaries уже есть готовые либы для динамической линковки под разные компиляторы, в том числе MSVC. Я вот просто сам всегда собираю, поскольку пользуюсь статической линковкой, а также порой я включаю некоторые кастомные элементы, например, поддержку LZMA2. Да и всегда хорошо, когда версия компилятора, которым была создана библа, 100% совпадает с версией компилятора, который будешь использовать для своего проекта.
0
|
||
|
Модератор
|
|||
| 02.09.2025, 20:32 [ТС] | |||
|
Я запускал его из командной строки и оно так и делало. А как ему указать компилятор пока не знаю. Обычно я привык вначале тщательно изучить то чем собираюсь пользоваться, но тут времени нет. Хотя, может и стоит прочитать всю документацию на CMake, хотя бы узнаю как компилятор задать.
0
|
|||
| 02.09.2025, 20:32 | |
|
Помогаю со студенческими работами здесь
20
Qt creator. Не удается добавить стороннюю библиотеку в проект cmake (добавление в проект boost/algorithm) Как с помощью cmake собрать проект ?
Cmake проект сборки документации Как собрать проект на CMAKE в Visual Studio Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|