VC2010 C++ - организация исходных файлов



У меня были некоторые вопросы о том, как организовать исходные файлы в проекте VC 2010 C++. Фильтры по умолчанию, которые включены, не будут достаточными, так как в конечном итоге у меня будет много .cpp и .HPP файлы, так что это будет грязно. Я хотел бы создать папку в корне проекта под названием "источник", а затем создать папки внутри "источника" для различных категорий исходных файлов, которые я хотел бы использовать. Когда я щелкаю Правой Кнопкой Мыши решение, я получаю только возможность добавить фильтр, а не папку. Я могу создайте папки вручную в проводнике windows, затем включите их, но затем я потеряю возможность добавлять фильтры. Есть ли способ добавить новые папки (без использования проводника windows) и по-прежнему использовать фильтры?



кроме того, есть ли что-то похожее на $(CURDIR), что я мог бы использовать для включения папки исходного файла без необходимости абсолютного пути?



заранее спасибо за помощь

619   5  

5 ответов:

вы немного смущены тем, как Visual Studio работает с файлами C++, но это нормально, так как документация паршивая. Во-первых: в отличие от C# или Java, расположение файлов в проекте не имеет никакого отношения к расположению файлов на вашем диске. Файлы и папки не "в" проект, действительно, проект только перечисляет имена и пути файлов и папок, которые уже существуют на диске.

в общем, вы создаете макет папки с исходными файлами внутри этих папок. Ты сделаешь это за пределами из Visual Studio. Вы также создаете файл проекта. Когда вы "добавляете файл" в проект, все, что вы делаете, это говорите проекту, где найти файл на диске.

давайте работать с конкретным примером, и я покажу вам, как я хотел бы организовать его. Предположим, вы создаете программу графического калькулятора под названием SuperCalc выступает. Вы будете иметь исходную папку, а затем создавать папки внутри Источник для хранения различных файлов. Предположим, что папки, которые вы создаете:

  • SuperCalc\Source\Input
  • SuperCalc\Source\Math
  • SuperCalc\Source\Math\Matrix
  • SuperCalc\Source\Output

у вас есть 3 поддиректории Source:Input,Output и Math. Элемент Math подкаталог имеет подкаталог под названием Matrix. Так и будет .файлы cpp во входных, математических, матричных и выходных данных. Вы создадите эти каталоги (папки) с помощью Проводника Windows или командная строка.

теперь вы также хотите создать файл решения (SuperCalc.sln) и файл проекта (SuperCalc.vcxproj & SuperCalc.vcxproj.filters). Сделайте это внутри Visual Studio. Обычно файл проекта находится в подпапке каталога решения; это будет сделано автоматически для вас Visual Studio. Выберите место для файл решения -- он должен быть где-то в той же структуре каталогов (дереве папок), что и исходный код. Я бы предложил поместить его рядом с исходным каталогом, в:

  • SuperCalc\Build

зайдите в VS и выберите File > New > Project > Visual Studio Solutions > Blank Solution File. Дайте решению имя (возможно, "SuperCalc") и местоположение (место, которое мы только что выбрали в ). Он создаст файл решения для вас.

теперь щелкните правой кнопкой мыши на решении в обозревателе решений ("решение SuperCalc, 0 проектов") и выберите Add > New Project. Выберите имя - это будет имя исполняемого файла вашей программы, например "SuperCalc"! Выбирать Win32, либо Консольное Приложение Win32 (это программа DOS-консоли) или Win32 Project (это обычная программа Windows GUI). Обычно я затем нажимаю на Настройки Приложения, чтобы внести некоторые важные изменения: во-первых, я выбираю пустой проект, потому что я не хочу, чтобы Visual Studio создавала файлы и код для меня, если я не скажу это. Когда все настроено так, как я хочу, я нажимаю кнопку Готово.

теперь у вас есть решение файл и проект, созданный Visual Studio. У вас также есть исходный код или, по крайней мере, структура каталогов (дерево папок), в которой будет создан исходный код, созданный за пределами Visual Studio. Пришло время соединить эти две вещи вместе.

если вы хотите, вы можете перечислить все ваши исходные файлы в фильтр исходных файлов вашего проекта. Даже если они будут поступать из разных каталогов (Input, Matrix и т. д.), нет никакой необходимой связи между местоположениями файлов на диске и их появление в проекте. Но если у вас много файлов, проще создать "подфильтры", фильтры внутри фильтра исходных файлов и дать им имена подпапок источника. Таким образом, вы реплицируете структуру дисковых каталогов внутри файла проекта.

щелкните правой кнопкой мыши на фильтре исходных файлов проекта "SuperCalc" и выберите Добавить > Добавить новый фильтр. Дайте ему имя Input (первый из SuperCalc\Source справочники.) Также создайте фильтры Math и Output. Щелкните правой кнопкой мыши на Math фильтр и выберите Добавить > Добавить новый фильтр, чтобы создать подфильтр под названием Matrix (внутри математики). Теперь у вас есть эти фильтры:

   SuperCalc
      Source Files
         Input
         Math
            Matrix
         Output

который параллелен каталогам (папкам), созданным ранее. это чисто удобное расположение для людей. Visual Studio не понимает в этом ничего особенного. Если вы просто скажете VS " добавить файл" он не будет помещать файл в правильный фильтр. Вам придется сказать, куда его положить.

добавить или создать свой .cpp файлы, выберите имя фильтра, соответствующее каталогу, где .cpp файл. Итак, чтобы добавить или создать файл SuperCalc\Source\Math\Matrix\matrix_multiply.cpp щелкните правой кнопкой на Matrix фильтр в обозревателе решений и выберите Добавить > Добавить новый файл или добавить существующий файл. (Добавить существующий файл, Когда вы уже написали matrix_multiply.cpp и вы просто хотите сказать проект, где он находится.) Используйте диалоговое окно для перехода к . Повторите этот процесс для всех исходных файлов в вашей программе.

у вас также был вопрос "есть ли что-то похожее на $(CURDIR), что я мог бы использовать для включения папки исходного файла без необходимости абсолютного пути?"Вам повезло: проекты Visual Studio не используют абсолютные пути! Они используют относительные пути. Файл проекта хранит относительный путь, необходимый для получения из каталога, содержащего .расширением vcxproj файл в каталог, содержащий исходный файл. Так что если вы создали SuperCalc.sln и SuperCalc.vcxproj где я предложил (the SuperCalc\Build каталог), и вы добавляете свой .cpp файлы в исходных подкаталогах, вы можете пойти посмотреть внутри SuperCalc.файл vcxproj с помощью блокнота, и вы увидите такие строки:

<ClCompile Include="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />

поскольку нет абсолютных путей, вы можете взять все дерево каталогов SuperCalc и переместить его в другое место, и все это будет работать. Нет необходимости в переменной окружения хаки, как $(CURDIR).

последнее, что нужно знать: поскольку вы помещаете свои исходные файлы в несколько каталогов, у вас могут возникнуть проблемы с #includeИнг заголовки .ч или .HPP-файлы. Вы должны сообщить компилятору каталоги, в которых находятся ваши заголовочные файлы. Они, вероятно, будут разбросаны по нескольким каталогам. Поэтому измените параметры проекта: щелкните правой кнопкой мыши имя проекта в обозревателе решений, выберите Свойства и перейдите к свойствам конфигурации > C / C++ > Общие Сведения. Первое поле в таблице свойств говорит "дополнительные каталоги включения". прежде, чем вы сделаете что-нибудь еще, нажмите на раскрывающееся меню конфигурации и выберите Все Конфигурации. Если у вас есть как 32-разрядная, так и 64-разрядная сборка, нажмите на раскрывающееся меню платформы и выберите Все Платформы. Теперь перейдите в раздел "дополнительные каталоги включения" и добавьте все пути ко всем исходным каталогам, причем пути указаны относительно каталог файла проекта. Поэтому для примера SuperCalc это будет выглядеть так:

..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output

после этого изменения, файл как источник\математика Матрица\\matrix_multiply.СРР может иметь линия

#include "input_configuration.hpp"

#включить файл из входного каталога, и он будет просто работать.

(если это не все просто работает, обычный подход-вернуться в свойства проекта и возиться с числом ..\ последовательности Перед вашим дополнительным включают Справочники. помните что каждый раз, когда вы идете, чтобы сделать изменения вы должны выбрать Все Конфигурации снова -- в противном случае ваши изменения будут применяться только к текущей конфигурации (Debug или Release). Эта настройка не липкий.)

на самом деле можно просматривать (и манипулировать) физической файловой структурой с помощью Visual Studio, как описано в это так пост:

заголовок / исходный файл не является требованием, предъявляемым Visual Studio. Это просто макет по умолчанию, и он виртуальный, а не физический. Если вы нажмите кнопку "Показать все файлы" в обозревателе решений, он покажет дерево папок как на жестком диске, который вы можете манипулировать как ты считаешь нужным.

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

поскольку это может помочь кому-то, я должен также добавить, что ваши исходные файлы отделены от вашего файла проекта (*.vcxproj) затрудняет создание новых файлов, так как Visual Studio по умолчанию хочет создать новые файлы в той же папке, что и проект. Решение этой проблемы, которое я нашел до сих пор, заключается в использовании расширения Visual Assists, поскольку оно позволяет добавлять новые файлы относительно каталога или вашего текущего открытого файла. Смотрите этой пост для дальнейшего объяснения.

Я опаздываю, но я советую принято отвечать. Основная причина если для кода мобильность. Вместо этого я рекомендую :

  1. чтобы создать макет папок и подпапок за пределами visual studio (то же самое, что и принятый ответ, но следующие пункты отличаются). Внутри каждой подпапки создайте include и src папку
  2. затем в свойствах конфигурации > C / C++ > общие > "дополнительные каталоги включения" (для Все конфигурации и все формы пластин) добавить один папка, которая является основой всех ваших вложенных папок.
  3. добавить файлы src и включает в себя файлы в этих подпапках.

  4. наконец, включите каждый заголовочный файл с помощью родственники пути к этой базовой папки.

чтобы было понятно : если макет вашего проекта выглядит следующим образом :

MyProjet
   Math
     include
       random.h
       functions.h
     src
       random.cpp
       functions.cpp
   Probability
      include
        normal.h
      src
        normal.cpp

вы должны functions.cpp в ниже приводится заявление:

#include"Math/include/functions.h"

если вам также нужно использовать normal код в функции.cpp, то в верхней части functions.cpp должна выглядеть так:

#include"Math/include/functions.h"
#include"Probability/include/normal.h"

при этом вы сможете повторно использовать свою подпапку Math в другом проекте (B) без боли: просто добавив MyProject базовая папка в "дополнительные каталоги включения" проекта B.

ключевой момент состоит в том, чтобы иметь только один базовая папка в "Дополнительный Включить каталоги " свойство.

ps: функция intellisense VS 2015 очень помогает писать #include...

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

Project > Properties > Configuration Properties > Debugging > Working Directory

Comments

    Ничего не найдено.