Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
1

Организация проекта

16.07.2021, 12:13. Показов 874. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Вопрос сумбурный и наверняка глупый.
У меня есть небольшой проект, который организован так:
---build
---include
---src
---resources
CMakeLists.txt

Я планирую, что сборка проекта будет происходит в папке build. В конечном счёте там должен появится исполняемый файл. Во время работы программе нужны ресурсы. Пусть это будет файл test.txt, который лежит в папке resources. В исполняемом файле у меня сейчас жёстко зашит путь до этого файла ("./resources/test.txt"). Как сделать так, чтобы путь до файла не был жёстко зашит в программе? Как сделать так, чтобы формат пути не зависил от ОС?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.07.2021, 12:13
Ответы с готовыми решениями:

Организация проекта на C++
Как правильно организовать большой проект? Незная этого я создал так: stdafx.h включает в себя...

Организация проекта с cmake
Доброго времени суток,помогите разобраться с вопросом:как правильно организовать проект с...

Правильная организация cmake проекта
Вопрос от веб разработчика избалованного грейдлами и мавенами по правильной организации структуры...

Правильная организация файлов проекта, CMake
Здравствуйте... Из прочитанной информации по всему простору интернета у меня теперь в голове...

6
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.07.2021, 12:52 2
Цитата Сообщение от schoolboy_ Посмотреть сообщение
Я планирую, что сборка проекта будет происходит в папке build
согласно твоему описанию, папка build у тебя находится в корне проекта.
гадить в каталог проекта - дурной тон.

цивилизованные сценарии сборки гадят в отдельных от проектов,
специально отведенных местах.

Цитата Сообщение от schoolboy_ Посмотреть сообщение
Как сделать так, чтобы путь до файла не был жёстко зашит в программе?
все файловые пути, которые используются в программе,
должны быть привязаны к какому либо абсолютному пути.

по умолчанию в качестве такого пути используется так называемый "рабочий каталог"

например, ты запустил свою программу в каталоге "C:\sandbox"
значит "C:\sandbox" и будет каталогом,
относительно которого выстраиваются все остальные пути.

на практике такая схема часто не удобна.
гораздо удобнее выстраивать пути относительно каталога, где расположен экзешник.

например, у тебя есть игра, которая расположена: "C:\game\game.exe"
при запуске игра загружает ресурс: "resource\test.txt"

для этого она берет свой собственный каталог: "C:\game"
и прибавляет к нему искомый путь: "C:\game" + "resource\test.txt"

в итоге получается абсолютный путь,
заданный относительно каталога программы: "C:\game\resource\test.txt"

удобно, когда программа ищет ресурсы,
которые расположены тут же - рядышкой с экзешником.

Цитата Сообщение от schoolboy_ Посмотреть сообщение
Как сделать так, чтобы формат пути не зависил от ОС?
std::filesystem
1
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
16.07.2021, 13:10  [ТС] 3
Цитата Сообщение от hoggy Посмотреть сообщение
например, у тебя есть игра, которая расположена: "C:\game\game.exe"
при запуске игра загружает ресурс: "resource\test.txt"
для этого она берет свой собственный каталог: "C:\game"
и прибавляет к нему искомый путь: "C:\game" + "" + "resource\test.txt"
Получается что ресурсы должны располагаться в папке с исполняемым файлом? Как в таком случае собирать из IDE?
Цитата Сообщение от hoggy Посмотреть сообщение
должны быть привязаны к какому либо абсолютному пути.
Добавлено через 12 минут
Я сделал как вы написали, у меня получилось так:
C++
1
2
3
  namespace fs = std::filesystem;
  const fs::path workdir = fs::current_path();
  const fs::path configdir = workdir / "resources" / "test,txt";
При этом я продублировал файлы ресурсов в директорию для сборки. Но это по прежнему мне не нравится. Возможно, я вас неправильно понял.
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.07.2021, 13:17 4
Цитата Сообщение от schoolboy_ Посмотреть сообщение
Получается что ресурсы должны располагаться в папке с исполняемым файлом?
нет, конечно жеж.
файлы никому расписок не давали, и клятв не приносили.
с какой стати, они кому-то что-то должны?

Цитата Сообщение от schoolboy_ Посмотреть сообщение
Как в таком случае собирать из IDE?
это очень не_корректный вопрос.
в квадрате не_корректный.

и вот почему:

во-первых, видишь этот файл?
Цитата Сообщение от schoolboy_ Посмотреть сообщение
CMakeLists.txt
его наличие намекает проницательному читателю,
что ты используешь cmake.
cmake может выполнять сборку самостоятельно.
для сборки тебе IDE не нужны.

во-вторых, видишь этот файл?
Цитата Сообщение от schoolboy_ Посмотреть сообщение
CMakeLists.txt
его наличие намекает проницательному читателю,
что ты используешь cmake.

а это значит, что если тебе так важно использовать именно IDE,
то ты просто можешь попросить cmake сгенерировать для неё решение.

в-третьих, то, как именно происходит сборка из под IDE,
зависит от самой IDE, а они бывают разными.
однако, ты не удостоужился сообщить название твоей IDE
и вот на какой ответ ты рассчитываешь?
ты, случаем, не перепутал форум программистов с форумом телепатов?


в-четвертых, и это самая главная твоя ошибка.
ты почему то думаешь, что работа программы,
и её ресурсы как то связанны с IDE.

это просто глупо.
итоговая программа и IDE - вообще никак не связанные вещи.

вот, например, ты написал игрушку.
и эту игрушку отдал своему другу Васе.
а Вася вообще не программист.
у него никаких IDE отродясь не водилось.
и вот как по-твоему, твоя игра должна работать на кампютере Васи?
1
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.07.2021, 13:25 5
Цитата Сообщение от schoolboy_ Посмотреть сообщение
const fs:ath workdir = fs::current_path();
  const fs:ath configdir = workdir / "resources" / "test,txt";
смотри, ты открываешь файл:
C++
1
auto file = openFile("./resources/test.rxt");
ты указал относительный путь: "./resources/test.txt"
вот относительно чего он будет относительным?

Цитата Сообщение от hoggy Посмотреть сообщение
по умолчанию в качестве такого пути используется так называемый "рабочий каталог"
такой относительный путь уже будет относительно рабочего каталога.
вот здесь ты делаешь ровно тоже самое:

C++
1
2
const fs::path workdir = fs::current_path();
const fs::path configdir = workdir / "resources" / "test,txt";
а зачем делать тоже самое, если за тебя это итак сделает система?
бессмысленная трата времени.

Цитата Сообщение от schoolboy_ Посмотреть сообщение
При этом я продублировал файлы ресурсов в директорию для сборки
нафига?

файлы с ресурсами обычно хранят в каталоге проекта.
на этапе сборки, просто копируешь ресурсы в каталог к бинарнику.

если ты работаешь из под 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
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.07.2021, 13:44 7
Цитата Сообщение от schoolboy_ Посмотреть сообщение
есть абсолютно отвратительная строка - "./resources/test.txt". Я могу изменить её на "resources/test.txt"
и какой целью заменять его на "resources/test.txt" ?
ты сам понимаешь, чего ты хочешь?

вот этот путь: "./resources/test.txt" - это относительный путь,
заданный относительно рабочего каталога.
чем он тебе так не нравится?
0
16.07.2021, 13:44
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2021, 13:44
Помогаю со студенческими работами здесь

Как в решении из двух проектов из второго проекта обращаться к функциям из первого проекта?
Собственно данная задача возникает, когда в Blank Solution добавляем проект модульных тестов к...

Правильная организация проекта?
Здравствуйте, расскажите пожалуйста как, как правильно организовать свой проект(Qt - C++): 1. Все...

Организация проекта из двух приложений
Нужно написать приложение-сервер, приложение-клиент. Естественно будут какие-то общие классы...

CMake и организация сборки проекта
В общем, вопрос таков: каким образом можно "наставить" cmake, чтобы он собирал бинарники в одной...

Как присоединить к h файлу проекта и к cpp проекта файлы из папки, лежащей с ними на одном уровне
Добрый день, такая задача, Пользуюсь RAD 2010 Хочу в папке проекта создать папку lib/ и в неё...

Вызов exe одного проекта exe другого проекта
Есть проект, нажимая на вкладку меню, должен запускаться exe другого проекта. Как сделать? Помогите...


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

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