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

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

02.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 под данный пример
Кликните здесь для просмотра всего текста
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
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
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
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
70
71
72
73
cmake_minimum_required(VERSION 3.12)
project(bin2cpp)
 
# Настройка компилятора
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
# Настройки для Windows
if(WIN32)
    add_definitions(-D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -DWX_PRECOMP)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthreads -pipe")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -mthreads")
endif()
 
# Флаги компилятора
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wall -Winvalid-pch -O2")
 
# Путь к wxWidgets
set(WXWIDGETS_ROOT "C:/wxWidgets-3.3.1")
set(CMAKE_PREFIX_PATH "${WXWIDGETS_ROOT}")
 
# Поиск wxWidgets
find_package(wxWidgets REQUIRED COMPONENTS core base)
include(${wxWidgets_USE_FILE})
 
# Файлы проекта
set(SOURCES
    bin2cppApp.cpp
    bin2cppApp.h
    bin2cppMain.cpp
    bin2cppMain.h
    GUIFrame.cpp
    GUIFrame.h
    WxWizFrame.fbp
    wx_pch.h
)
 
set(RESOURCES
    resource.rc
    version.rc
)
 
# Добавляем исполняемый файл
add_executable(bin2cpp WIN32 ${SOURCES} ${RESOURCES})
 
# Подключаем wxWidgets
target_link_libraries(bin2cpp ${wxWidgets_LIBRARIES})
 
# Настройки для предкомпилированного заголовка
target_compile_definitions(bin2cpp PRIVATE -include wx_pch.h)
 
# Включаем директории
target_include_directories(bin2cpp PRIVATE
    ${WXWIDGETS_ROOT}/include
    ${WXWIDGETS_ROOT}/lib/gcc_lib/mswu
)
 
# Настройки для ресурсов
if(WIN32)
    # Windows библиотеки
    set(WINDOWS_LIBS
        kernel32 user32 gdi32 winspool comdlg32 advapi32
        shell32 ole32 oleaut32 uuid comctl32 wsock32
        shlwapi version oleacc uxtheme gdiplus msimg32
    )
    
    target_link_libraries(bin2cpp ${WINDOWS_LIBS})
endif()
 
# Настройка выходных директорий
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
Обрати внимание, что несмотря на то, что собирать будет CMake, инклюды нужно передать и VS Code, чтобы тот правильно показывал подсказки.
.vscode/c_cpp_properties.json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/wxWidgets-3.3.1/include",
                "C:/wxWidgets-3.3.1/lib/gcc_lib/mswu"
            ],
            "defines": [
                "__GNUWIN32__",
                "__WXMSW__",
                "wxUSE_UNICODE",
                "WX_PRECOMP"
            ],
            "compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}
.vscode/settings.json
JSON
1
2
3
4
5
6
7
8
9
{
    "cmake.configureSettings": {
        "CMAKE_C_COMPILER": "C:/msys64/ucrt64/bin/gcc.exe",
        "CMAKE_CXX_COMPILER": "C:/msys64/ucrt64/bin/g++.exe",
        "CMAKE_MAKE_PROGRAM": "C:/msys64/ucrt64/bin/make.exe"
    },
    "cmake.generator": "MinGW Makefiles",
    "cmake.buildDirectory": "${workspaceFolder}/build"
}
.vscode/tasks.json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "cmake",
            "args": [
                "--build",
                "${workspaceFolder}/build",
                "--config",
                "Release"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}
Конечно, нет гарантии, что код ИИ будет 100% работать. Но если что-то не будет работать, то можно будет вручную исправлять эти ошибки. В любом случае, это лучше, чем сесть и с нуля писать CMakeLists.txt.
А вот потом, когда проект уже будет настроен, то не составит труда вручную добавлять какие-то новые сорцы к CMakeLists.txt.
1
Заблокирован
02.09.2025, 10:49
Цитата Сообщение от Curry Посмотреть сообщение
Да, она тоже есть, но мне нужно собирать с помощью gcc
И при чем тут cmakelists.txt?
Смотри документацию по своему cmake.
cmake -G "MinGW Makefiles"
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
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
Цитата Сообщение от Royal_X Посмотреть сообщение
Это означает, что CMakeLists.txt нужен.
Я не говорю что он не нужен.
Я про то, что выбор используемого набора средств сборки производится не в cmakelists.txt.
Тогда вопрос: при чем тут cmakelists.txt?

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
ТС хочет использовать CMake в VS Code
Цитата Сообщение от Curry Посмотреть сообщение
помогите кто ни будь сделать годный CMakeListst.txt что бы собирать проекты хотя бы под win
А я вот эту задачу увидел.

Добавлено через 4 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Тогда вопрос: при чем тут cmakelists.txt?
Во избежание недопонимания.
Вопрос в контексте его ошибки.
ТС хочет компилировать с помощью gcc, но средство сборки используется msbuild.

Добавлено через 13 минут
Вот например у меня под виндой:

The following generators are available on this platform (* marks default):
* Visual Studio 17 2022 = Generates Visual Studio 2022 project files.
И у ТС походу так же, а команду у него просто : C:\samples\wxWidgets\uiaction>cmake CMakeLists.txt

Ох уж эти специалисты негросетей...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 11:59
Цитата Сообщение от SmallEvil Посмотреть сообщение
Я про то, что выбор используемого набора средств сборки производится не в cmakelists.txt.
Компилятор он укажет в JSON файлах VS Code. Так же само, генератор (MinGW Makefiles) тоже указывается в JSON. В примере выше это все видно.

НО все равно в 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
Модератор
Эксперт Java
 Аватар для alecss131
2840 / 1349 / 403
Регистрация: 11.08.2017
Сообщений: 4,304
Записей в блоге: 2
02.09.2025, 12:35
Цитата Сообщение от Royal_X Посмотреть сообщение
Почему это важно?
По хорошему нормальные библиотеки ничего такого не требуют, они генерируют свой набор cmake файлов в которых все что нужно уже прописано и в своем проекте ничего кроме find_package и target_link_libraries делать не нужно. То есть инклуды сами подтянутся в проект, все флаги и системные либы будут подключены в cmake файлах библиотеки (внутри файлов *Config.cmake *ConfigVersion.cmake *Targets.cmake *Targets-debug.cmake *Targets-release.cmake и тд, где * название либы)
Вся суть cmake именно в этом, а если писать кучу всего для подключаемых библиотек, то суть cmake теряется.

Добавлено через 1 минуту
Цитата Сообщение от alecss131 Посмотреть сообщение
делать не нужно
Ну еще можно например задать флаг для статики и пдодобная мелкая универсальная настройка, но и то это простой set без всяких условий
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 12:47
Цитата Сообщение от alecss131 Посмотреть сообщение
По хорошему нормальные библиотеки
это ж еще нужно уметь написать хорошую кроссплатформенную библиотеку.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 12:50
Curry, оказалось с расширением VS Code для работы с CMake все еще проще. Не пришлось даже JSON файлы настраивать.
Всего лишь юзал CMakeLists.txt. Вот доказательство, что у меня четко все сработало. На скриншоте результат успешной компиляции wxWidgets проекта со статической линковкой.



Использовал такой CMakeLists.txt. Этот файл писал ИИ. Не утверждаю, что там всё правильно, поскольку я не спец. в CMake. Но этот файл, по крайней мере, позволяет успешно собрать. Доказательство выше.


Кликните здесь для просмотра всего текста
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
cmake_minimum_required(VERSION 3.12)
project(TestWxWidgetsApp)
 
# Устанавливаем политику для совместимости с верхним регистром ROOT переменных
if(POLICY CMP0144)
    cmake_policy(SET CMP0144 NEW)
endif()
 
# Настройка компилятора
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
# Настройки для Windows
if(WIN32)
    add_definitions(-D__GNUWIN32__ -D__WXMSW__ -DwxUSE_UNICODE -DWX_PRECOMP)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthreads -pipe")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -mthreads")
endif()
 
# Флаги компилятора
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wall -Winvalid-pch -O2")
 
# Путь к wxWidgets
set(WXWIDGETS_ROOT "C:/Users/User/wxWidgets-3.3.1")
set(CMAKE_PREFIX_PATH "${WXWIDGETS_ROOT}")
 
# Поиск wxWidgets
find_package(wxWidgets REQUIRED COMPONENTS core base)
include(${wxWidgets_USE_FILE})
 
# Файлы проекта
set(SOURCES
    TestApp.cpp
    TestMain.cpp
    GUIFrame.cpp
)
 
set(HEADERS
    TestApp.h
    TestMain.h
    GUIFrame.h
    WxWizFrame.fbp
    wx_pch.h
)
 
set(RESOURCES
    resource.rc
)
 
# Добавляем исполняемый файл
add_executable(TestWxWidgetsApp WIN32 ${SOURCES} ${HEADERS} ${RESOURCES})
 
# Подключаем wxWidgets
target_link_libraries(TestWxWidgetsApp ${wxWidgets_LIBRARIES})
 
# Включаем директории
target_include_directories(TestWxWidgetsApp PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${WXWIDGETS_ROOT}/include
    ${WXWIDGETS_ROOT}/lib/gcc_lib/mswu
)
 
# Настройки для предкомпилированного заголовка - только для C++ файлов
set_source_files_properties(${SOURCES} PROPERTIES
    COMPILE_FLAGS "-include wx_pch.h"
)
 
# Явно указываем, что файлы ресурсов не должны использовать флаги C++
set_source_files_properties(${RESOURCES} PROPERTIES
    COMPILE_FLAGS ""
    LANGUAGE RC
)
 
# Настройки для ресурсов
if(WIN32)
    # Windows библиотеки
    set(WINDOWS_LIBS
        kernel32 user32 gdi32 winspool comdlg32 advapi32
        shell32 ole32 oleaut32 uuid comctl32 wsock32
        shlwapi version oleacc uxtheme gdiplus msimg32
    )
    
    target_link_libraries(TestWxWidgetsApp ${WINDOWS_LIBS})
endif()
 
# Настройка выходных директорий
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)


Цитата Сообщение от SmallEvil Посмотреть сообщение
Ох уж эти специалисты негросетей...
а вот человек, который напишет, как настроить проект без негросетей. Видимо, он эксперт в CMake

Я лишь показал, как за пару минут можно быстро настроить и скомпилировать в VS Code. На этом я прощаюсь.
1
Заблокирован
02.09.2025, 13:00
Royal_X, почему ты прицепился к VSCode?
1. CMake не умеет генерить под VSCоde.
2. ТС просто конфигурирует свой проект
Цитата Сообщение от Curry Посмотреть сообщение
C:\samples\wxWidgets\uiaction>cmake CMakeLists.txt
Объясни мне.
0
Модератор
Эксперт Java
 Аватар для alecss131
2840 / 1349 / 403
Регистрация: 11.08.2017
Сообщений: 4,304
Записей в блоге: 2
02.09.2025, 13:01
Цитата Сообщение от Royal_X Посмотреть сообщение
это ж еще нужно уметь написать хорошую кроссплатформенную библиотеку
Думаю уж создатели wxWidgets не дураки, есть более мелкие либы которые хорошо используют cmake
0
Заблокирован
02.09.2025, 13:02
Цитата Сообщение от Curry Посмотреть сообщение
потом хочу попробовать кросс компиляцию для linux
3. Чем это ковыряние с VSCode поможет ему создать кроссплатформенный cmakelists.txt для генератора?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 13:07
Цитата Сообщение от SmallEvil Посмотреть сообщение
почему ты прицепился к VSCode?
ТС смог по моей инструкции собрать wxWidgets и даже успешно использовать в C::B.
Но он пишет:
Цитата Сообщение от Curry Посмотреть сообщение
я хочу использовать VS Code
Ему не нравится C::B, она ему кажется старинной ide.

Цитата Сообщение от SmallEvil Посмотреть сообщение
CMake не умеет генерить под VSCоde
и не нужно генерить. Для VS Code есть официальное расширение от майкрософт, которое напрямую работает с CMakeLists.txt (не нужно даже ставить CMake, в расширении он уже интегрирован). Это же лучше, чем ждать, что CMake будет генерировать проект на JSON для VS Code. Ведь, по сути у VS Code нет как такового собственного формата для проекта, как у VS.

Цитата Сообщение от alecss131 Посмотреть сообщение
Думаю уж создатели wxWidgets не дураки
я же написал выше, что я просто попросил у ИИ конвертировать *.cbp файл (это файл проекта Code::Blocks) в файл CMakeLists.txt. Поэтому такой странный CMakeLists.txt. Если ты знаешь, как будет правильнее, то помоги ТС.
И выше я выложил доказательство, что мой (а скорее, написанный ИИ) CMakeLists.txt рабочий.
0
Заблокирован
02.09.2025, 13:15
Цитата Сообщение от Royal_X Посмотреть сообщение
и не нужно. Для VS Code есть официальное расширение от майрософт, которое напрямую работает с CMakeLists.txt
Что это значит?
ИДЕ что бы скомпилировать проект на основе cmake, нужно сконфигурировать этот самый cmakelists.txt с помощью cmake с выбранным средством сборки и скомпилировать по нему.
Я конечно немного далек от этого.
Но не вижу чем cmakelists.txt в msvc/vscode/eclipse/notepad должен отличатся.
Только вспомогательные json файлы могут отличаться, которые описывают окружение. Хотя это тоже часть CMAKE проекта.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 13:32
Цитата Сообщение от Royal_X Посмотреть сообщение
я просто попросил у ИИ конвертировать *.cbp файл (это файл проекта Code::Blocks) в файл CMakeLists.txt
Если ты спросишь, каким боком здесь вообще C::B? Отвечаю: в C::B есть удобный wizard, который помогает очень быстро настроить wxWidgets проект (чтобы не писать с нуля). Кроме настройки библиотек и опций компилятора, там создаются cpp, h файлы, помогающие быстро собрать минимальную программу. Эти файлы видны на скриншоте. Я просто скопировал их в папку VS Code проекта. И потом добавил CMakeLists.txt.

Добавлено через 4 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что это значит?
в VS Code можно:

1. Использовать проект на основе JSON файлов. Даже wxWidgets-проект можно без проблем собрать только на одних JSON. Тут пример: https://github.com/huckor/wxwi... ree/master Но недостаток такого подхода в том, что ты потом не сможешь использовать этот проект в других ide.

или

2. Установить официальное расширение CMake Tools и потом настроить проект только через CMakeLists.txt.

Второй способ применяется, когда в VS Code нужно работать со сложными кроссплатформенными проектами.

ТС хочет именно второй вариант. То есть, ему нравится VS Code - и это неплохой выбор (IntelliSense и все прочее там шустрее, чем в студии), но в то же время он не хочет использовать проект на одних JSON.

Добавлено через 9 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
нужно сконфигурировать этот самый cmakelists.txt
да, так и есть. Многие IDE умеют участвовать в этой конфигурации. Например, пользователь через графический интерфейс (кликая на кнопки, менюшки) добавляет файл в проект или какую-нибудь либу подключает, а IDE сама добавляет нужные строки в cmakelists. Но в VS Code нужно ручками писать. Но я выше написал, как можно облегчить эту задачу - попросить у ИИ конвертировать *.cbp файл (это файл проекта Code::Blocks) в файл CMakeLists.txt.

В итоге, на создание пустого проекта в C::B у меня ушло менее минуты. Потом отправил *.cbp файл в промт ИИ. Получил CMakeLists.txt. Создал пустую папку проекта для VS Code. Скопировал автогенерированные сорцы из C::B проекта в эту папку и туда же кинул CMakeLists.txt.
Вуаля. За пару минут собирается приложение на wxWidgets. Причем, для этого не нужно знать какие библиотеки подключать, не нужно смотреть на примеры кода для мин. приложения. C::B всё это делает за тебя.

За пару минут у нас есть проект на VS Code с использование CMake, который полностью настроен, в котором уже есть минимальные сорцы и который без единой ошибки собирает приложение.
1
Модератор
Эксперт Java
 Аватар для alecss131
2840 / 1349 / 403
Регистрация: 11.08.2017
Сообщений: 4,304
Записей в блоге: 2
02.09.2025, 14:08
Я ради интереса собрал wxWidgets, у себя на винде под студией с помощью cmake, думаю на других ос и о=компиляторах отличий не будет. Собрал только статику и без предкомпилированных заголовков (в опциях есть такая возможность)

и в итоге получился вот такой CMakeLists.txt
Code
1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 3.27)
project(wxtest)
 
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_PREFIX_PATH C:/Library/wxWidgets-3.3.1)
 
set(wxWidgets_USE_STATIC ON)
find_package(wxWidgets REQUIRED COMPONENTS core base OPTIONAL_COMPONENTS net CONFIG)
 
add_executable(${PROJECT_NAME} WIN32 main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC wx::core wx::base)
Кликните здесь для просмотра всего текста
ну и минимальный пример
C++
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
#include <wx/wx.h>
 
class MyApp : public wxApp{
public:
    bool OnInit() override;
};
 
class MyFrame : public wxFrame{
public:
    explicit MyFrame(const wxString& title);
    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
private:
wxDECLARE_EVENT_TABLE();
};
 
enum {
    Minimal_Quit = wxID_EXIT,
    Minimal_About = wxID_ABOUT
};
 
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
                EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
                EVT_MENU(Minimal_About, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
 
wxIMPLEMENT_APP(MyApp);
 
bool MyApp::OnInit(){
    if (!wxApp::OnInit())
        return false;
    auto *frame{new MyFrame("Minimal wxWidgets App")};
    frame->Show(true);
    return true;
}
MyFrame::MyFrame(const wxString& title): wxFrame(nullptr, wxID_ANY, title){
    SetIcon(wxICON(sample));
    auto *fileMenu{new wxMenu{}};
    auto *helpMenu{new wxMenu{}};
    helpMenu->Append(Minimal_About, "&About\tF1", "Show about dialog");
    fileMenu->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
    auto *menuBar{new wxMenuBar{}};
    menuBar->Append(fileMenu, "&File");
    menuBar->Append(helpMenu, "&Help");
    SetMenuBar(menuBar);
    CreateStatusBar(2);
    SetStatusText("Welcome to wxWidgets!");
}
 
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){
    Close(true);
}
 
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){
    wxMessageBox(wxString::Format(
                                 "Welcome to %s!\n"
                                 "\n"
                                 "This is the minimal wxWidgets sample\n"
                                 "running under %s.",
                                 wxVERSION_STRING,
                                 wxGetOsDescription()
                         ),
                 "About wxWidgets minimal sample",
                 wxOK | wxICON_INFORMATION,
                 this);
}

В этом файле CMAKE_PREFIX_PATH можно вынести в окружение среды либо в json настройки vscode, так же add_executable поместить в if которая будет определять ос, либо самому написать точку входа, а то без этого (WIN32) у меня прога с wxIMPLEMENT_APP писала ошибку что не найдена функция main (точка входа). подключал не wx/wxprec.h а простой wx/wx.h

Цитата Сообщение от Royal_X Посмотреть сообщение
и не нужно генерить
Ни одна ide не умеет собрать cmake проекты без генерации, все, включая vscode генерируют свой проект и собирают его, только это может делаться под капотом, то есть ide открывает и показывает cmake проект, но внутри происходит генерация чаще с cmake используется ninja система сборки.
компилятор и прочее настраивается в json файлах у vscode

Добавлено через 1 минуту
Добавление WIN32 в add_executable меняет точку входа с main на WinMain
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 14:18
Цитата Сообщение от alecss131 Посмотреть сообщение
и в итоге получился вот такой CMakeLists.txt
так работает, если используешь wxWidgetsConfig.cmake
а если у тебя только голая библиотека, всего две папке include и lib и нет этого файла, то так не будет работать. Выше я показал, как будет выглядеть CMakeLists.txt, когда нет этого файла.
В любом случае, когда скачиваешь сорцы из официального сайта wxWidgets - там есть и примеры проектов на CMake, есть и этот конфиг. Проблем думаю не должно быть. Каждый волен делать, как ему больше нравится.
1
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,517
Записей в блоге: 9
02.09.2025, 15:19  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Curry, написание CMakeLists.txt это всегда боль.
Да, уж. Ранее у меня до него руки не доходили поскольку кроссплатформенные на С++ не делал.
А альтернативы ему не знаю.
Цитата Сообщение от SmallEvil Посмотреть сообщение
ТС хочет компилировать с помощью gcc, но средство сборки используется msbuild.
В этом и была проблема. По крайней мере одна из проблем. Одно дело что хочу я, другое что выбирает cmake.
Цитата Сообщение от Royal_X Посмотреть сообщение
в C::B есть удобный wizard, который помогает очень быстро настроить wxWidgets проект
Вот, вот. Вначале я пытался использовать cmake исходя из примера идущего с wxWidgets.
Потом, глядя на makefile-ы оттуда же собрать проект хотя бы из одного файла в VS Code
tasks.json
JavaScript
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
{
        "version": "2.0.0",
        "tasks": [
            {
                "type": "shell",
                "label": "gcc build active file",
                "command": "C:/prog/msys64/ucrt64/bin/gcc.exe",
                "args": [
/*
Ключи компилятора. Совпадают и у Code::Blocks и в C:\prog\wxWidgets-3.3.1\build\msw\makefile.gcc
*/
//                    "-std=c++17",
                    "-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",
/*
Ключи линкера у Code::Blocks, они же в другой последовательности в makefile.gcc
*/
                    "-LC:/prog/wxWidgets-3.3.1/lib/gcc_lib",
                    "-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", // "-lws2_32"
                    "-lshlwapi",
                    "-lversion",
                    "-loleacc",
                    "-luxtheme",                    
                    "-lgdiplus",
                    "-lmsimg32",
 
 
//                    "-Wl,--subsystem,windows", // это в makefile.gcc но на него ошибка
// библиотеки из makefile.gcc
                    "-lwxwebp",
                    "-lwinmm",
                    "-lrpcrt4",
                    "-lwininet",
 
                    "-mwindows", // не знаю что это, но этот ключ везде.
                    "${file}",
                    "-o",
                    "${fileDirname}/build/${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "C:\\prog\\msys64\\ucrt64\\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
 
                "presentation": {
                    "clear": true    
                }
            }
        ]
    }

Линкер ругается, хотя всё тоже что используется при сборке wxWidgets.
Пришлось ставить С::В, смотреть, как собирает он.
Цитата Сообщение от Royal_X Посмотреть сообщение
в VS Code можно:
1. Использовать проект на основе JSON файлов. Даже wxWidgets-проект можно без проблем собрать только на одних JSON.
Ну да, проект из одного файла, такой я и пытался сделать. А своей системы сборки у VS Code, увы, нет.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6128 / 2823 / 1038
Регистрация: 01.06.2021
Сообщений: 10,290
02.09.2025, 20:01
Цитата Сообщение от Curry Посмотреть сообщение
В этом и была проблема. По крайней мере одна из проблем. Одно дело что хочу я, другое что выбирает cmake
Вообще-то не так. CMake ничего не выбирает. Ты сам должен выбрать. А именно, когда ты создаешь в папке проекта файл 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
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,517
Записей в блоге: 9
02.09.2025, 20:32  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
CMake ничего не выбирает.
CMake может выбирать. В вашем примере тоже есть пункт "Left Cmake guess ...".
Я запускал его из командной строки и оно так и делало.
А как ему указать компилятор пока не знаю. Обычно я привык вначале тщательно изучить то чем собираюсь пользоваться, но тут времени нет. Хотя, может и стоит прочитать всю документацию на CMake, хотя бы узнаю как компилятор задать.
Цитата Сообщение от Royal_X Посмотреть сообщение
Другое дело, что раз ты компилировал wxWidgets из сорцов с помощью компилятора GNU, то значит и в твоем проекте потом должен использоваться этот компилятор. Если ты хочешь использовать MSVC, то и библиотеки wxWidgets должны быть собраны под MSVC.
Ну, я не до такой степени тёмный. )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2025, 20:32
Помогаю со студенческими работами здесь

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() {...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru