0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
||||||||||||||||
1 | ||||||||||||||||
.h и .hpp файлы и их подключение к коду04.12.2024, 23:15. Показов 977. Ответов 14
Метки нет (Все метки)
Учу плюсы, сам на линуксе, вскод. Пробую создать .h и .hpp файлы и подключить их к проекту, но они просто не работают. Пробовал ставить путь к файлу от самого диска, менять инклудпат, перемещать в другие директории и указывать путь туда, запихнуть это в смейк(зря я туда полез), ничего не помогло. Если подключить .cpp к main напрямую всё работает.
Рабпапка: /.vscode (от vscode) /.build (от cmake) /include (сюда пробовал запихнуть .h файл) CMakeLists.txt (изначально ради того, чтоб разобраться с ним создавал проект) console.h console.cpp - файл с определением Main.cpp - майн файл main.cpp \/
0
|
04.12.2024, 23:15 | |
Ответы с готовыми решениями:
14
Подключение в проекте .hpp и .cpp файлов Чем hpp-файлы отличаются от h-файлов? подключение hpp и срр,что то не правильно сделал,классы Файлы CPP, HPP как получить файл exe |
0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
|
05.12.2024, 15:21 [ТС] | 3 |
До сборки не доходит, линкер еще жалуется, что файлов нет в директории (хотя они очевидно есть). Сейчас думаю, что погорячился с тегами, потому что это скорее к вскоду относится а не к плюсам.
0
|
Заблокирован
|
|
05.12.2024, 15:43 | 4 |
Geger, попробуй для начала Makefile написать, а не трогать cmake, если ты его боишься!
Ну, а такую простейшую фигню можно и одной командой собрать. Вот же вендовозы! Вообще не умеют по-человечески разрабатывать… Все бы им мышей дырчить. Добавлено через 1 минуту Набери g++ main.cpp console.cpp и выложи, что там за маты. Откуда они вообще возникнуть могут, если ты ничего, кроме стандартной библиотеки, не используешь?Добавлено через 1 минуту Вот, я сделал это за тебя. Никаких матюков, естественно, нет. И даже работает: Код
./a.out Text
0
|
0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
|
05.12.2024, 16:13 [ТС] | 5 |
У меня тоже очевидно работает, если я буду собирать такую простецкую фигню через команду. Мне нужно чтоб это делал вскод, потому что команда будет в будущем расти и постоянно добавлять файлы ну такое себе. Makefile я уже делал, потому и пошел к cmake. И когда я говорю о том, что линкер жалуется, я имею в виду, что в вскоде не видит конкретно хедерфайлы, с .h. Когда я напрямую .cpp к main.cpp подключаю то всё четко без проблем работатает.
В cmake файле у меня только имя проекта, минимальные требования и добавленный main файл. Дальше я перешел к гайду, где чел через cmake добавляет библиотеки, на примере такого простого хедера и такой .cpp. Вот только у него всё норм, у меня нет. Я пошел искать и пришел сюда. Есть догадка, что это чисто проблема от вскода и тогда можно просто вырубить нах этот вид ошибок, потому что если билдить через смейк не обращая внимания (либо просто не показывает что произошла ошибка), то всё прекрасно линкуется и компилится и всё работает. Ошибка в вскоде: #include errors detected based on information provided by the configurationProvider setting. Squiggles are disabled for this translation unit (/home/tempoararyname/Documents/CmakeLearn/Main.cpp). configurationProvider - расширение вскода для cmake, выставленное в c_cpp_properties.json. Если убрать оттуда эту переменную, то ошибка: #include errors detected. Please update your includePath. Squiggles are disabled for this translation unit (/home/tempoararyname/Documents/CmakeLearn/Main.cpp). Просит поменять инклудпат, но в нем и так выставлена "${workspaceFolder}/**" как переменная рабочей папки и всего что в ней есть. Если добавить путь от ~ то ошибка останется на месте. В общем повторюсь, я склоняюсь к тому, что проблема в ide, а не самих плюсах. И еще не знаю к чему про вендовозов, я на manjaro Добавлено через 9 минут Проверил догадку, нет, ошибка всё еще есть, он просто не видит файл в директории.
0
|
692 / 299 / 77
Регистрация: 07.01.2023
Сообщений: 1,241
|
|
05.12.2024, 16:26 | 6 |
Geger, может CMakeLists.txt покажете?
и да. #include "файл" подразумевает что файл ищем в текущем каталоге. а вот #include <файл> уже сначала в systroot/usr/include потом во всех путях указанных в -I компилятора
0
|
Заблокирован
|
|
05.12.2024, 16:35 | 7 |
Если бы "не видел", то и в окне редактора не отображал!
Ну что за вендовозничество? Я без понятия, как настраивается сборка по клавосочетанию в этом редакторе, но явно там можно выбрать, вызывать ли напрямую компилятор, make или сначала еще и cmake (и с нужными параметрами). В qt-creator, которым я пользуюсь, именно так и есть. Только я не использую сборку по нажатию клавосочетаний, т.к. это жутко неудобно. Я в консоли, как положено, пишу ручками make и т.д. А что до выбора cmake, не понимаю: если ты сам писал CMakeLists.txt, то в чем проблемы? А если стащил откуда-то, то, естественно, с твоим набором файлов оно работать не будет. Пример CMakeLists.txt показать? Добавлено через 1 минуту К тому, что такой подход - исключительно черта вендузятников. Линуксоиды так не делают. И прекрасно понимают, что хотят от софта. Если уж пользуешься фашистской vscode, то это значит, что ты умеешь ее настраивать. Если же нет, выбери другое IDE. А то и вообще для начала в geany попробуй.
0
|
662 / 359 / 55
Регистрация: 22.09.2023
Сообщений: 1,050
|
|
05.12.2024, 16:56 | 8 |
0
|
0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
||||||||||||||||
05.12.2024, 18:02 [ТС] | 9 | |||||||||||||||
CMAKE:
Код
cmake_minimum_required(VERSION 3.5.0) project(hello) //отсюда set(OSBitness 32) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(OSBitness 64) endif() set (Dir "${CMAKE_SOURCE_DIR}/bin/${CMAKE_SYSTEM_NAME}${OSBitness}/${CMAKE_BUILD_TYPE}") set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${Dir}/static libs") set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${Dir}") set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${Dir}") //и сюда чел показывал способ, чтоб результаты в нужные папки красиво складывались include_directories(.) add_library(console console.cpp) add_executable(${PROJECT_NAME} Main.cpp) target_link_libraries(${PROJECT_NAME} console) Вообще со вчера много что попробовал, сейчас файлы такие: main:
"Не видит", я подразумеваю ошибку в плане "No such file in directory". Если не понятно, буду писать "В окне окне ошибок показывает отсутствие файлов в дериктории, хотя он безусловно есть". Если знаете норм ресурсы, где можно почитать про cmake, то милости прошу. Документацию и официальные мануалы до дыр зачитал.
0
|
692 / 299 / 77
Регистрация: 07.01.2023
Сообщений: 1,241
|
|
05.12.2024, 19:06 | 10 |
Geger,
А не проще ли не страдать дурью и сделать так Код
cmake_minimum_required(VERSION 3.5.0) project(hello) add_executable(${PROJECT_NAME} Main.cpp console.cpp) Код
cmake_minimum_required(VERSION 3.5.0) project(hello) add_library(console console.cpp) set_target_properties(console PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/static) add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} console)
1
|
0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
|
05.12.2024, 19:18 [ТС] | 11 |
Согласен, что всё будет собираться и инклудиться, но хотелось бы научиться подключать сторонние библиотеки
0
|
Заблокирован
|
|
05.12.2024, 19:45 | 12 |
Сообщение было отмечено Geger как решение
Решение
Geger, по cmake отдельный сайт есть.
А один из моих старых шаблонов вот такой: Код
cmake_minimum_required(VERSION 2.8) set(PROJ <project name>) set(MINOR_VERSION "1") set(MID_VERSION "0") set(MAJOR_VERSION "0") set(VERSION "${MAJOR_VERSION}.${MID_VERSION}.${MINOR_VERSION}") enable_language(C) message("VER: ${VERSION}") # default flags set(CFLAGS -O2 -Wextra -Wall -Werror -W -std=gnu99) set(CMAKE_COLOR_MAKEFILE ON) # here is one of two variants: all .c in directory or .c files in list aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SOURCES) #list(REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/<file to remove>) #set(SOURCES list_of_c_files) # we can change file list #if(NOT DEFINED something) # set(SOURCES ${SOURCES} one_more_list) # add_definitions(-DSOME_DEFS) #endif() # cmake -DDEBUG=1 -> debugging if(DEFINED DEBUG) add_definitions(-DEBUG) endif() # directory should contain dir locale/ru for gettext translations set(LCPATH ${CMAKE_SOURCE_DIR}/locale/ru) if(NOT DEFINED LOCALEDIR) if(DEFINED DEBUG) set(LOCALEDIR ${CMAKE_CURRENT_SOURCE_DIR}/locale) else() set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale) endif() endif() ###### pkgconfig ###### # pkg-config modules (for pkg-check-modules) set(MODULES <modules>) # additional modules on condition #if(DEFINED SOMETHING) # set(MODULES ${MODULES} more_modules>=version) # add_definitions(-DSOMEDEFS) #endif() # find packages: find_package(PkgConfig REQUIRED) # non-required #find_package(<pkg1>) pkg_check_modules(${PROJ} REQUIRED ${MODULES}) # external modules like OpenMP: #include(FindOpenMP) #if(OPENMP_FOUND) # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") #endif() # append data from find_package: #list(APPEND ${PROJ}_INCLUDE_DIRS ${<pkg1>_INCLUDE_DIR} ${<pkg2>_INCLUDE_DIR}) #list(APPEND ${PROJ}_LIBRARIES ${<pkg1>_LIBRARY} ${<pkg2>_LIBRARY}) #list(APPEND ${${PROJ}_LIBRARY_DIRS} ${<pkg1>_LIBRARY_DIRS}) ###### additional flags ###### #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lfftw3_threads") # conditional check: #if(NOT DEFINED NO_GSL) # pkg_check_modules(GSL gsl) #endif() #if(NOT DEFINED GSL_VERSION) # message("GSL not found, some mathematics functions wouldn't be avialable") #else() # add_definitions(-DGSL_FOUND) #endif() project(${PROJ}) # change wrong behaviour with install prefix if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local") message("Change default install path to /usr") set(CMAKE_INSTALL_PREFIX "/usr") endif() message("Install dir prefix: ${CMAKE_INSTALL_PREFIX}") # gettext files set(PO_FILE ${LCPATH}/messages.po) set(MO_FILE ${LCPATH}/LC_MESSAGES/${PROJ}.mo) set(RU_FILE ${LCPATH}/ru.po) # exe file add_executable(${PROJ} ${SOURCES}) # another exe, depending on some other files #add_executable(test_client client.c usefull_macros.c parceargs.c) # -I include_directories(${${PROJ}_INCLUDE_DIRS}) # -L link_directories(${${PROJ}_LIBRARY_DIRS}) # -D add_definitions(${CFLAGS} -DLOCALEDIR=\"${LOCALEDIR}\" -DPACKAGE_VERSION=\"${VERSION}\" -DGETTEXT_PACKAGE=\"${PROJ}\" -DMINOR_VERSION=\"${MINOR_VERSION}\" -DMID_VERSION=\"${MID_VERSION}\" -DMAJOR_VERSION=\"${MAJOR_VESION}\") ###### pthreads ###### find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) set_property(TARGET ${PROJ} PROPERTY COMPILE_OPTIONS "-pthread") set_property(TARGET ${PROJ} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") endif() if(CMAKE_THREAD_LIBS_INIT) list(APPEND ${PROJ}_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") endif() # target libraries target_link_libraries(${PROJ} ${${PROJ}_LIBRARIES}) # Installation of the program INSTALL(FILES ${MO_FILE} DESTINATION "share/locale/ru/LC_MESSAGES") #PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) INSTALL(TARGETS ${PROJ} DESTINATION "bin") #PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) # Script to be executed at installation time (kind of post-intallation script) to # change the right accesses on the installed files #INSTALL(SCRIPT inst.cmake) ###### gettext ###### find_package(Gettext REQUIRED) find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) if(NOT GETTEXT_XGETTEXT_EXECUTABLE OR NOT GETTEXT_MSGFMT_EXECUTABLE) message(FATAL_ERROR "xgettext not found") endif() file(MAKE_DIRECTORY ${LCPATH}) file(MAKE_DIRECTORY ${LCPATH}/LC_MESSAGES) add_custom_command( OUTPUT ${PO_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} --from-code=utf-8 ${SOURCES} -c -k_ -kN_ -o ${PO_FILE} COMMAND sed -i 's/charset=.*\\\\n/charset=koi8-r\\\\n/' ${PO_FILE} COMMAND enconv ${PO_FILE} DEPENDS ${SOURCES} ) # we need this to prewent ru.po from deleting by make clean add_custom_command( OUTPUT ${MO_FILE} COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ${RU_FILE} -o ${MO_FILE} DEPENDS ${RU_FILE} ru_file_updated ) add_custom_command( OUTPUT ru_file_updated COMMAND [ -f ${RU_FILE} ] && ${GETTEXT_MSGMERGE_EXECUTABLE} -Uis ${RU_FILE} ${PO_FILE} || cp ${PO_FILE} ${RU_FILE} COMMAND ${CMAKE_COMMAND} -E touch ru_file_updated DEPENDS ${PO_FILE} ) add_custom_target(MO_FILE ALL DEPENDS ${MO_FILE})
1
|
0 / 0 / 0
Регистрация: 04.12.2024
Сообщений: 6
|
|
05.12.2024, 22:03 [ТС] | 13 |
Что-то я делаю неправильно, потому что у меня всё еще
Я его читал, пытался что-то применить, но решил начать с максимально простого.
Спасибо, буду смотреть
0
|
692 / 299 / 77
Регистрация: 07.01.2023
Сообщений: 1,241
|
|
06.12.2024, 07:49 | 14 |
Максимально простое с подключением вашей собственной статической библиотеки - мой второй пример. 6 строк в CMakeLists.
0
|
Заблокирован
|
|
06.12.2024, 13:28 | 15 |
Максимально просто.
Но все равно со временем захочется как минимум профили Release и Debug завести, возможно - gettext'ом воспользоваться и т.д., и т.п. Ну и у некоторых библиотек нет pc-файла, поэтому pkg-config их "не видит", а cmake-овского модуля может не быть. И придется самому писать. Однако, по сравнению с самописным Makefile, cmake более гибок. Особенно если надо, чтобы оно собиралось на разных дистрибутивах и даже в маздае (типа убунты). Ну и да, вместо старого способа проверять дефайны, удобней опции. Как-то так: Код
option(DEBUG "Compile in debug mode" OFF) option(DUMMY "Dummy camera plugin" ON) option(IMAGEVIEW "Build with imageview module" ON) option(ZWO "Add support of ZWO cameras" OFF) option(FLI "Add support of FLI cameras" OFF) ...
1
|
06.12.2024, 13:28 | |
06.12.2024, 13:28 | |
Помогаю со студенческими работами здесь
15
При распаковке SFML жалуется на одинаковые файлы Window.hpp Зачем файлы .h называть .hpp? Это новый стандарт? Что это дает? Подключение библиотек к коду Подключение интерфейса к коду Подключение API к коду Подключение прокси к коду Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|