Как подключить h файл в visual studio

Обновлено: 04.07.2024

У меня есть 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 показан результат исполнения первой программы.

Читайте также: