3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
1 | |
Организация проекта16.07.2021, 12:13. Показов 874. Ответов 6
Метки нет (Все метки)
Здравствуйте.
Вопрос сумбурный и наверняка глупый. У меня есть небольшой проект, который организован так: ---build ---include ---src ---resources CMakeLists.txt Я планирую, что сборка проекта будет происходит в папке build. В конечном счёте там должен появится исполняемый файл. Во время работы программе нужны ресурсы. Пусть это будет файл test.txt, который лежит в папке resources. В исполняемом файле у меня сейчас жёстко зашит путь до этого файла ("./resources/test.txt"). Как сделать так, чтобы путь до файла не был жёстко зашит в программе? Как сделать так, чтобы формат пути не зависил от ОС?
0
|
16.07.2021, 12:13 | |
Ответы с готовыми решениями:
6
Организация проекта на C++ Организация проекта с cmake Правильная организация cmake проекта Правильная организация файлов проекта, CMake |
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.07.2021, 12:52 | 2 |
согласно твоему описанию, папка build у тебя находится в корне проекта.
гадить в каталог проекта - дурной тон. цивилизованные сценарии сборки гадят в отдельных от проектов, специально отведенных местах. все файловые пути, которые используются в программе, должны быть привязаны к какому либо абсолютному пути. по умолчанию в качестве такого пути используется так называемый "рабочий каталог" например, ты запустил свою программу в каталоге "C:\sandbox" значит "C:\sandbox" и будет каталогом, относительно которого выстраиваются все остальные пути. на практике такая схема часто не удобна. гораздо удобнее выстраивать пути относительно каталога, где расположен экзешник. например, у тебя есть игра, которая расположена: "C:\game\game.exe" при запуске игра загружает ресурс: "resource\test.txt" для этого она берет свой собственный каталог: "C:\game" и прибавляет к нему искомый путь: "C:\game" + "resource\test.txt" в итоге получается абсолютный путь, заданный относительно каталога программы: "C:\game\resource\test.txt" удобно, когда программа ищет ресурсы, которые расположены тут же - рядышкой с экзешником. std::filesystem
1
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
||||||
16.07.2021, 13:10 [ТС] | 3 | |||||
Получается что ресурсы должны располагаться в папке с исполняемым файлом? Как в таком случае собирать из IDE?
Добавлено через 12 минут
Я сделал как вы написали, у меня получилось так:
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.07.2021, 13:17 | 4 |
нет, конечно жеж.
файлы никому расписок не давали, и клятв не приносили. с какой стати, они кому-то что-то должны? это очень не_корректный вопрос. в квадрате не_корректный. и вот почему: во-первых, видишь этот файл? его наличие намекает проницательному читателю, что ты используешь cmake. cmake может выполнять сборку самостоятельно. для сборки тебе IDE не нужны. во-вторых, видишь этот файл? его наличие намекает проницательному читателю, что ты используешь cmake. а это значит, что если тебе так важно использовать именно IDE, то ты просто можешь попросить cmake сгенерировать для неё решение. в-третьих, то, как именно происходит сборка из под IDE, зависит от самой IDE, а они бывают разными. однако, ты не удостоужился сообщить название твоей IDE и вот на какой ответ ты рассчитываешь? ты, случаем, не перепутал форум программистов с форумом телепатов? в-четвертых, и это самая главная твоя ошибка. ты почему то думаешь, что работа программы, и её ресурсы как то связанны с IDE. это просто глупо. итоговая программа и IDE - вообще никак не связанные вещи. вот, например, ты написал игрушку. и эту игрушку отдал своему другу Васе. а Вася вообще не программист. у него никаких IDE отродясь не водилось. и вот как по-твоему, твоя игра должна работать на кампютере Васи?
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
16.07.2021, 13:25 | 5 | ||||||||||
смотри, ты открываешь файл:
"./resources/test.txt" вот относительно чего он будет относительным? такой относительный путь уже будет относительно рабочего каталога. вот здесь ты делаешь ровно тоже самое:
бессмысленная трата времени. нафига? файлы с ресурсами обычно хранят в каталоге проекта. на этапе сборки, просто копируешь ресурсы в каталог к бинарнику. если ты работаешь из под IDE, тогда ищи в ней настройку: "запускаться из каталога бинарника". например, в Visual Studio такая настройка выглядит так:
1
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
16.07.2021, 13:32 [ТС] | 6 |
Смотри.
Я перехожу в папку build. В этой папке делаю cmake .. и у меня появляется проект. Дальше я собираю этот проект. После того как сборка проекта завершена, у меня есть исполняемый файл. у этого исполняемого файла есть рабочая директория (build). Сейчас у меня в исполняемом файл есть абсолютно отвратительная строка - "./resources/test.txt". Я могу изменить её на "resources/test.txt". Но тогда я должен продублировать папку resources и её содержимое.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.07.2021, 13:44 | 7 |
и какой целью заменять его на "resources/test.txt" ?
ты сам понимаешь, чего ты хочешь? вот этот путь: "./resources/test.txt" - это относительный путь, заданный относительно рабочего каталога. чем он тебе так не нравится?
0
|
16.07.2021, 13:44 | |
16.07.2021, 13:44 | |
Помогаю со студенческими работами здесь
7
Как в решении из двух проектов из второго проекта обращаться к функциям из первого проекта? Правильная организация проекта? Организация проекта из двух приложений CMake и организация сборки проекта Как присоединить к h файлу проекта и к cpp проекта файлы из папки, лежащей с ними на одном уровне Вызов exe одного проекта exe другого проекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике
В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
|
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование
В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
|
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике
В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
|
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации
В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
|
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира
В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
|
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин
История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
|
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией
В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
|
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации
В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
|
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий
В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
|
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO
/ / https:/ / leetcode. com/ studyplan/ top-interview-150/
package topInterview
. . .
|
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
|
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
|