Как подключить h файл в visual studio
У меня есть C ++ .h и .cpp файл из другого проекта, который я хочу включить в свой проект.
Я не хочу копировать файлы в свой проект, так как я хочу, чтобы любые изменения этих файлов были применены к обоим проектам.
Я включил каталог папки файла в
Свойства-> Каталоги VC ++-> Включить каталоги
Я также включил папку в
Свойства-> C / C ++ -> Общие -> Дополнительные каталоги включения
Кажется, что файлы .h работают. Если я переименую включить что-либо, кроме
Файл cpp получает неизвестные определения.
Когда я компилирую. Ошибка
Если я удалю файл cpp из проекта. Затем я получаю длинный список нерешенных функций.
Как я могу включить файлы .h и .cpp во второй проект?
Решение
Для файлов cpp вы можете просто щелкнуть правой кнопкой мыши по проекту, выбрать «добавить» -> существующий элемент.
Затем они должны скомпилироваться с другими, когда начнется сборка.
Я предлагаю вам изменить структуру проектов и извлечь общие функции из обоих проектов, чтобы скомпилировать их как статическую библиотеку. Поместите общие заголовки в некоторую подпапку внутри библиотечного проекта и обозначьте тогда как
В зависимых проектах после настройки Дополнительные каталоги включения Вы можете сослаться на эти включает в себя как
Этот подход поможет вам в будущем, так как вы можете повторно использовать этот общий модуль в каждом проекте, который вы хотите.
Другие решения
Попробуйте перетащить их в свое решение?
Вы можете создать новую папку в своем решении и перетащить их все в эту папку!
Вы не можете просто выбрать такие файлы. Есть два разумных способа решить это. 1, предоставил общий доступ к файлу с помощью системы управления версиями кода (например, svn / git). 2, скомпилируйте .cpp в библиотеку и создайте ссылку на эту библиотеку.
Если cpp может использоваться несколькими проектами, это должно означать, что код является чем-то общим. Это означает, что вы должны скомпилировать этот код в библиотеку, а затем совместно использовать эту библиотеку. Компиляция одного и того же cpp в несколько библиотек может привести к конфликтам позже, если две такие библиотеки когда-либо понадобятся для совместной работы.
Имена программных элементов, таких как переменные, функции, классы и т. д., должны быть объявлены, прежде чем их можно будет использовать. Например, нельзя просто писать x = 42 без предварительного объявления "x".
Объявление сообщает компилятору, является ли элемент int , a double , функцией class или другим элементом. Кроме того, каждое имя должно быть объявлено (прямо или косвенно) в каждом cpp-файле, в котором он используется. При компиляции программы каждый CPP-файл компилируется независимо в единицу компиляции. Компилятор не имеет сведений о том, какие имена объявляются в других единицах компиляции. Это означает, что если вы определите класс или функцию или глобальную переменную, необходимо предоставить объявление этого объекта в каждом дополнительном cpp-файле, который его использует. Каждое объявление этого элемента должно быть точно одинаковым во всех файлах. Небольшая несогласованность вызовет ошибки или непреднамеренное поведение, когда компоновщик пытается объединить все единицы компиляции в одну программу.
в Visual Studio 2019 функция модулей c++ 20 появилась в качестве улучшения и в конечном итоге заменяет файлы заголовков. Дополнительные сведения см. в разделе Общие сведения о модулях в C++.
Пример
В следующем примере показан общий способ объявления класса и его использования в другом исходном файле. Начнем с файла заголовка, my_class.h . Он содержит определение класса, но обратите внимание, что определение не завершено; Функция-член do_something не определена:
В файле реализации при необходимости можно использовать using оператор, чтобы не указывать каждое упоминание "my_class" или "cout" с "N::" или "std::". Не помещайте using операторы в файлы заголовков!
После того как компилятор завершит компиляцию каждого CPP-файла в OBJ-файлы, он передает OBJ-файлы компоновщику. Когда компоновщик объединяет объектные файлы, обнаруживается только одно определение для my_class; Он находится в OBJ-файле, созданном для my_class. cpp, и сборка выполняется.
Включить условия
Что следует разместить в файле заголовка
Поскольку файл заголовка потенциально может включаться в несколько файлов, он не может содержать определения, которые могут формировать несколько определений с одним и тем же именем. Следующие действия не разрешены или считаются очень неправильными.
- встроенные определения типов в пространстве имен или глобальной области
- невстроенные определения функций
- определения неконстантных переменных
- агрегатные определения
- безымянные пространства имен
- Директивы using
Использование using директивы не обязательно приведет к ошибке, но может вызвать проблему, так как она переводит пространство имен в область каждого CPP-файла, который напрямую или косвенно включает этот заголовок.
Пример файла заголовка
В следующем примере показаны различные виды объявлений и определений, допустимых в файле заголовка.
В качестве примера мы рассмотрим подключение библиотеки SDL к нашему проекту в Visual Studio 2017 (работать будет и с более новыми версиями Visual Studio).
Шаг №1: Создаем папку для хранения библиотеки
Создаем папку Libs на диске C ( C:\Libs ).
Шаг №2: Скачиваем и устанавливаем библиотеку
Шаг №3: Указываем путь к заголовочным файлам библиотеки
Открываем свой любой проект в Visual Studio или создаем новый, переходим в "Обозреватель решений" > кликаем правой кнопкой мыши (ПКМ) по названию нашего проекта > "Свойства" :
В "Свойства конфигурации" ищем вкладку "С/С++" > "Общие" . Затем выбираем пункт "Дополнительные каталоги включаемых файлов" > нажимаем на стрелочку в конце > "Изменить" :
В появившемся окне кликаем на иконку с изображением папки, а затем на появившееся троеточие:
Заголовочные файлы находятся в папке include внутри нашей библиотеки, поэтому переходим в нее ( C:\Libs\SDL2-2.0.9\include ) и нажимаем "Выбор папки" , а затем "ОК" :
Шаг №4: Указываем путь к файлам с реализацией библиотеки
Переходим на вкладку "Компоновщик" > "Общие" . Ищем пункт "Дополнительные каталоги библиотек" > нажимаем на стрелочку в конце > "Изменить" :
Опять же, нажимаем на иконку с папкой, а затем на появившееся троеточие. Нам нужно указать следующий путь: C:\Libs\SDL2-2.0.9\lib\x86 . Будьте внимательны, в папке lib находятся две папки: x64 и x86 . Даже если у вас Windows разрядности x64, указывать нужно папку x86 . Затем "Выбор папки" и "ОК" :
После этого переходим в "Компоновщик" > "Ввод" . Затем "Дополнительные зависимости" > нажимаем на стрелочку в конце > "Изменить" :
В появившемся текстовом блоке вставляем:
Затем переходим в "Компоновщик" > "Система" . После этого "Подсистема" > нажимаем на стрелочку вниз > выбираем "Консоль (/SUBSYSTEM:CONSOLE)" > "Применить" > "ОК" :
Шаг №5: Копируем dll-ку в папку с проектом
Переходим в папку x86 ( C:\Libs\SDL2-2.0.9\lib\x86 ), копируем SDL2.dll и вставляем в папку с вашим проектом в Visual Studio. Чтобы просмотреть папку вашего проекта в Visual Studio, нажмите ПКМ по названию вашего проекта > "Открыть содержащую папку" :
Затем вставляем скопированный файл (SDL2.dll) в папку с проектом (где находится рабочий файл .cpp):
Шаг №6: Тестируем
Теперь, чтобы проверить, всё ли верно мы сделали — копируем и запускаем следующий код:
SFML - это библиотека для языка C++, обеспечивающая простые средства создания окна, двумерного рисования, работы с сетью и с операционной системой. Она работает на Windows, Linux и Mac OS X. В статье мы покажем, как подключить SFML к проекту в Visual Studio.
Содержание
После скачивания нас ожидает ещё несколько шагов для подключения SFML к приложению:
- обеспечить поиск заголовочных файлов *.h препроцессором C++
- обеспечить поиск библиотек *.lib ( *.a ) компоновщиком C++
- перечислить библиотеки *.lib ( *.a ), используемые проектом
- добавить динамические библиотеки *.dll ( *.so`) в пути поиска программы
- добавить макрос SFML_DYNAMIC в настройки препроцессора
Выбор Visual Studio
Предпочтительно использовать последнюю выпущенную версию Visual Studio Community Edition, и выбирать английскую локализацию. Если вы установили другую локализацию (например, русскую), её лучше удалить и всё же поставить английскую. В противном случае появится целый ряд проблем с терминологией, поиском информации в сети и использованием статей и книг. Не секрет, что большая часть актуальной информации о программировании в сети — на английском языке, и лучше, если интерфейс среды разработки тоже будет английским.
Механизм Property Sheet
Лучше всего сделать настройки сборки легко переносимыми между разными компьютерами. Это означает, что в проекте не должно быть абсолютных путей к файлам и каталогам. Кроме того, хотелось бы упростить создание нового проекта на SFML.
Соблюсти эти требования можно с помощью Property Sheets — внешних файлов, которые система сборки MSBuild и среда Visual Studio интерпретируют при загрузке проекта *.vcxproj .
Для начала работы с Property Sheets откройте вкладку “Property Manager” вместо “Solution Explorer” в панели Visual Studio. Нужный пункт меню доступен из раздела “View”, но может находиться непосредственно в этом меню или скрываться в подменю “Other Windows”.
Выбранный Property Sheet можно настроить вместо настройки проекта, и внесённые изменения будут действовать для всех проектов на данной машине, но не попадут под контроль версий Git.
На выходе вы получите файл *.props , который представляет собой переносимые между проектами настройки сборки. В этот файл надо добавить пути к заголовочным файлам и библиотекам, как описано ниже.
Настройка путей поиска компонентов SFML
После распаковки загруженного архива с SFML в распакованном каталоге будут следующие важные для нас компоненты:
- каталог include должен быть добавлен в пути поиска заголовочных файлов (в Visual Studio это называют include directories, на UNIX их принято называть include paths)
- каталог lib должен быть добавлен в пути поиска линкуемых библиотек (в Visual Studio это называют library directories, на UNIX их принято называть linker search paths)
Внесённые изменения среда отображает жирным шрифтом:
При настройке путей поиска в диалоге их редактирования не забудьте оставить включённой галочку “Inherit from parent or project settings”, чтобы случайно не сбросить стандартные пути поиска заголовков и библиотек, входящих в состав Windows API, C++ Standard Library и C Standard Library
Настройка предопределённых макросов препроцессора
Поскольку SFML подключается нами как динамическая библиотека, нам надо не забыть объявить макрос SFML_DYNAMIC в списке предопределённых макросов (в Visual Studio они называются Preprocessor Definitions):
Настройка шага компоновки (linking)
В настройки компоновщика (linker) в списке его входных файлов необходимо добавить
- для Release-конфигурации: sfml-graphics.lib, sfml-window.lib, sfml-system.lib
- для Debug-конфигурации: sfml-graphics-d.lib, sfml-window-d.lib, sfml-system-d.lib
Копирование DLL в каталог с собранной программой
В дистрибутиве SFML каталог bin содержит разделяемые библиотеки ( *.dll ), которые следует добавить в каталог с исполняемым файлом после сборки программы.
- Вы можете скопировать DLL вручную
- Вы можете настроить шаг сборки, например, PreLink или PostBuild
Пример на SFML (рисование круга на экране)
Пример ниже можно использовать для проверки работоспособности подключённого SFML. В случае ошибок внимательно читайте их содержание. Прежде всего определите, на каком шаге сборки происходит ошибка:
Теперь в поле редактора Name (в нижней части окна) следует задать имя нового файла и указать расширение ".с". Например, main.c. Имя файла может быть достаточно произвольным, но имеется негласное соглашение, что имя файла должно отражать его назначение и логически описывать исходный код, который в нем содержится. В проекте, состоящем из нескольких файлов, имеет смысл выделить файл , содержащий главную функцию программы, с которой она начнет выполняться. В данном пособии такому файлу мы будем задавать имя main.c, где расширение .с указывает на то, что этот файл содержит исходный код на языке С, и он будет транслироваться соответствующим компилятором. Программам на языке С принято давать расширение .с. После задания имени файла в поле редактора Name, получим форму, показанную на рис. 1.10.
Рис. 1.10. Задание имени файла, подключаемому к проекту
Затем следует нажать кнопку Add. Вид среды Visual Studio после добавления первого файла к проекту показан на рис. 1.11. Добавленный файл отображается в дереве Solution Explorer под узлом Source Files (файлы с исходным кодом), и для него автоматически открывается редактор.
На рис. 1.11 в левой панели в папке Solution Explorer отображаются файлы, включенные в проект в папках. Приведем описание.
Папка Source Files предназначена для файлов с исходным кодом. В этой папке отображаются файлы с расширением .с.
Папка Header Files содержит заголовочные файлы с расширением .h.
Папка Resource Files содержит файлы ресурсов , например изображения и т. д.
Следующий шаг состоит в настройке проекта. Для этого в меню Project главного меню следует выбрать hello Properties (или с помощью последовательного нажатия клавиш Alt+F7). Пример обращения к этому пункту меню показан на рис. 1.12.
После того как произойдет открытие окна свойств проекта, следует обратиться (с левой стороны) к Configuration Properties. Появится ниспадающий список , который показан на рис. 1.13. Выполнить обращение к узлу General , и через него в правой панели выбрать Character Set, где установить свойство Use Multi-byte Character Set. Настройка Character Set (набор символов) позволяет выбрать, какая кодировка символов – ANSI или UNICODE – будет использована при компиляции программы. Для совместимости со стандартом C89 мы выбираем Use Multi-Byte Character Set. Это позволяет использовать многие привычные функции, например, функции по выводу информации на консоль .
После сделанного выбора, показанного на рис. 1.13, следует нажать кнопку Применить. Затем следует выбрать узел С/С++ и в ниспадающем меню выбрать пункт Code Generation, через который следует обратиться в правой части панели к закладке Enable C++ Exceptions, для которой установить No (запрещение исключений С++). Результат установки выбранного свойства показан на рис. 1.14. После произведенного выбора нажать кнопку Применить.
Далее в ниспадающем меню узла С/С++ необходимо выбрать пункт Language и через него обратиться в правую часть панели, где установить следующие свойства: свойство Disable Language Extensions (дополнительные языковые расширения фирмы Microsoft) в Yes (/Za), свойство Treat wchar_t as Built-in Type (рассматривать тип wchar_t как встроенный тип) установить в No (/Zc:wchar_t–), свойство Force Conformance in For Loop Scope (соответствие стандарту определения локальных переменных в операторе цикла for ) установить в Yes(/Zc:forScope) , свойство Enable Run-Time Type Info (разрешить информацию о типах во время выполнения ) установить в No (/GR–), свойство Open MP Support (разрешить расширение Open MP – используется при написании программ для многопроцессорных систем) установить в No(/openmp–).
Результат выполнения этих действий показан на рис. 1.15.
После выполнения указанных действий следует нажать клавишу Применить. Далее в ниспадающем списке узла С/С++ следует выбрать пункт Advanced и в правой панели изменить свойство Compile As в свойство компиляции языка С, т.е. Compile as C Code (/TC). Результат установки компилятора языка С показан на рис. 1.16.
Рис. 1.16. Результат выбора режима компиляции языка С
После нажатия клавиш Применить и ОК сначала откроется подготовленный проект с пустым полем редактора кода, в котором можно начать писать программы. В этом редакторе наберем программу, выводящую традиционное приветствие "Hello World". Для компиляции созданной программы можно обратиться в меню Build, или, например, набрать клавиши Ctr +F7. В случае успешной компиляции получим следующую экранную форму, показанную на рис. 1.17.
Рис. 1.17. Успешно откомпилированная первая программа на языке С
Для приведенного кода программы запуск на ее исполнение из окна редактора в Visual Studio 2010 можно нажать клавишу F5. рис. 1.18 показан результат исполнения первой программы.
Читайте также: