|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
||||||||||||||||
Code::Blocks + cmake14.02.2023, 01:28. Показов 3603. Ответов 10
Метки нет (Все метки)
Всем привет! Решил разобраться с системами сборок в целом и с CMake в частности, для этого попытался прикрутить его к IDE CodeBlocks. Структура тестового проекта такая:
Кликните здесь для просмотра всего текста
testCmake1
| |- CMakeLists.txt |- main.cpp |- inc ...|- options.h CMakeLists.txt: Кликните здесь для просмотра всего текста
CMAKE_MINIMUM_REQUIRED (VERSION 3.10)
include_directories( inc/ ) set( SRC main.cpp ) project ( Test_prj ) add_executable ( test ${SRC} ) Также в опциях проекта Build options... - Pre-build steps я написал
Кликните здесь для просмотра всего текста
Далее, когда я запускаю сборку, скрипты из Pre-build steps успешно выполняются: Кликните здесь для просмотра всего текста
Running project pre-build steps
cmake -S . -B build -G "MinGW Makefiles" make -C build -- The C compiler identification is GNU 8.1.0 -- The CXX compiler identification is GNU 8.1.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/c++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done (0.9s) -- Generating done (0.0s) -- Build files have been written to: C:/Projects/C_Projects/testCmake1/build make: Entering directory 'C:/Projects/C_Projects/testCmake1/build' make[1]: Entering directory 'C:/Projects/C_Projects/testCmake1/build' make[2]: Entering directory 'C:/Projects/C_Projects/testCmake1/build' make[2]: Leaving directory 'C:/Projects/C_Projects/testCmake1/build' make[2]: Entering directory 'C:/Projects/C_Projects/testCmake1/build' [ 50%] Building CXX object CMakeFiles/test.dir/main.cpp.obj [100%] Linking CXX executable test.exe make[2]: Leaving directory 'C:/Projects/C_Projects/testCmake1/build' [100%] Built target test make[1]: Leaving directory 'C:/Projects/C_Projects/testCmake1/build' make: Leaving directory 'C:/Projects/C_Projects/testCmake1/build' По итогу я получаю в папке build свой исполняемый файл test.exe и тут начинаются первые проблемы. Если этот файл попробовать запустить, то сразу ошибка - 0xC000007B. Как-то я уже с ней сталкивался в другом контексте, по-моему это ошибка в подключаемой системной библиотеке. Но странно другое, если выполнить те же скрипты из Pre-build steps вручную через командную строку, то test.exe собирается и работает нормально. Интересно также, что при сборке из CB test.exe получается 56 кб (с ошибкой), а при запуске команд вручную - 51 кб (рабочий файл). Дальше я хочу дебажить свой проект на CMake из CodeBlocks. Насколько я понимаю, Pre-build steps сейчас полностью собирают мой проект до .exe файла т.е. CB нужно только запускать его, но тут я сталкиваюсь со второй проблемой. После выполнения Pre-build, CB начинает сам снова собирать проект, будто никакого CMake у меня и нет:
#include "options.h" из main.cpp. Ошибку можно обойти, если написать #include "inc/options.h", но я ведь специально прописывал include_directories( inc/ ) в CMakeLists.txt, почему CB это не видит?Также я облазил все настройки, но не нашел, где конфигурируется стандартная команда сборки для проекта g++.exe -Wall -g .... Если в настройках проекта указать "Custom Makefile", то среда выдаст другую команду сборки: mingw32-make.exe -q -f Makefile Debug Эта команда может не выполниться т.к. Debug тут является целью сборки и это имя должно совпадать с "test" из add_executable ( test ${SRC} ).Подведу итог, вопросы следующие: 1. Почему при одинаковых командах сборки получается разный результат из CB и из командной строки? 2. Где в CB править стандартную команду сборки проекта? Можно ли вообще отключить стандартную сборку, если все и собирается внешними инструментами?
0
|
||||||||||||||||
| 14.02.2023, 01:28 | |
|
Ответы с готовыми решениями:
10
Code::blocks MS VS in CODE BLOCKS |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 14.02.2023, 11:38 | ||
|
Однако CMake умеет генерировать файлы проекта для CB. Нужно только указать -G "CodeBlocks - MinGW Makefiles", например.
0
|
||
|
Модератор
|
|||||||
| 14.02.2023, 11:42 | |||||||
1
|
|||||||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
||
| 15.02.2023, 00:43 [ТС] | ||
|
zayats80888, ну, думал CB "все умеет", надо только настроить... как Qt
В общем буду через него видимо сборку с CMake настраивать. Хотел именно автоматизировать процесс CMake из среды разработки. Руками я это и так научился делать, пока с CB разбиралсяДобавлено через 2 минуты
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 15.02.2023, 00:58 | |||||
|
0
|
|||||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|||||||
| 15.02.2023, 17:35 [ТС] | |||||||
mingw32-make.exe -q -f Makefile Debug ... Понятно, что он берет это не с потолка и где-то это должно настраиваться, но вот где...Вопрос можно переформулировать. Я вижу, где в CB настраиваются pre/post-build steps, но где настраивается сам процесс сборки?
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 15.02.2023, 18:45 | ||
Сообщение было отмечено Evgen173 как решение
РешениеУ меня нет его под рукой, но насколько я помню, все настройки и команды(в том числе и команды pre-build) хранятся в файле проекта .cbp. Именно он является прослойкой между gui и make. Сборка же выполняется системой make(CB должен генерировать мэйкфайлы). Заставить CB генерировать .cmake файл взависимости от ваших настроек в интерфейсе вы можете только изменив исходный код. Если вам нужна интеграция CMake, то выберите другую IDE.
2
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 15.02.2023, 19:53 | |||
Сообщение было отмечено Evgen173 как решение
РешениеЕще раз, почему генерация cbp-файла не подходит? Сборка с помощью make (makefile для которого сгенерировал cmake) и сборка с помомщью codeblocks (проект для которого сгенернировал cmake) ничем не будут отличаться, т.к. источник у вас один - cmake-скрипт. Так в чем проблема??
1
|
|||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|
| 15.02.2023, 20:24 [ТС] | |
|
DrOffset, я могу сгенерировать .cbp файл командой
cmake -S . -B build -G "CodeBlocks - MinGW Makefiles" Что она сделает? Считает структуру проекта из CMakeLists.txt, соберет файлы с кодом и создаст на основе этого файл проекта для CB. Я открываю проект, вношу изменения и хочу пересобрать его из CB. Будет ли в таком случае вызываться cmake?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 15.02.2023, 20:39 | ||
|
1
|
||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|
| 15.02.2023, 20:44 [ТС] | |
|
zayats80888, понял, буду разбираться. Всем огромное спасибо за подсказки!
0
|
|
| 15.02.2023, 20:44 | |
|
Помогаю со студенческими работами здесь
11
Code::Blocks code::blocks 10.05 Code:Blocks Code::blocks и VS Отладка в Code Blocks Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|