2010-02-05 2 views
6

Я довольно новичок в разработке кода C/C++ в MSVS, но одна из вещей, которые меня уже смутили, - это то, что после добавления в исходный код набора исходных и заголовочных файлов, чтобы они показывали соответственно, в папках «Исходные файлы» MSVS и «Заголовочные файлы», я должен впоследствии сообщить компилятору, где мои файлы заголовков находятся в разделе «Project-> properties-> C/C++ -> General». Мне кажется, что MSVS уже должна пытаться разрешить любые «include» ... »'заявления, сначала просматривая набор файлов заголовков, которые я включил в проект.MS Visual Studio Project заголовочные файлы

Кто-нибудь хочет прокомментировать используемую здесь логику?

Спасибо, Travis

ответ

2

На самом деле, добавив файлы заголовков в так называемой папке "Header Files" является необязательным. Даже не делая этого, вы можете просто указать путь заголовка в «Project-> Properties -> ....», и он все равно будет работать.

Возможно, вы можете думать о перспективах только заголовков вашего проекта, которые могут быть добавлены в папку «Заголовочные файлы», а что касается большого проекта с несколькими сторонними библиотеками, вы определенно не можете идти и продолжать добавлять каждый заголовок файл в вашу папку.

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

Все, что указано выше, является только моим пониманием. У меня нет никаких доказательств, подтверждающих это. Итак, мои извинения заранее, это неправильно. Не бомбардируйте меня с помощью Downvotes, пожалуйста. :)

+0

Спасибо, Джей за ваш ответ. Я согласен с тем, что для крупных проектов по-прежнему потребуется функция «Проект-> Свойства». Тем не менее, я все еще думаю, что компилятор проекта автоматически ссылается на файлы заголовков проекта для разрешения #include - это интуитивно понятная функция, которая может быть легко реализована без противоречия с необходимостью использования дополнительных внешних каталогов. Я признаю в вашей аргументации определенную логику, что желателен единый механизм конфигурации. – Travis

+0

@Travis. Если бы вы заметили, что вы можете добавлять файлы из любой папки на свой диск в папку «Заголовочные файлы» в среде IDE. Кроме того, в исходном файле иногда вы можете включить заголовок как «#include folder1/myheader.h» по различным причинам. В этом случае вам нужно указать путь, не включая folder1 в компилятор. Теперь, чтобы IDE угадала его, структура папок на диске и IDE должна сопоставить, что приведет к ненужному ограничению в среде IDE. Тем не менее, если в IDE добавлена ​​какая-то более удобная функция, как вы полагаете, я определенно буду ее приветствовать. :) – Jay

2

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

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

Это дает вам возможность использовать только заголовочные файлы в проекте визуальной студии: возможность легко открывать их из Visual Studio. Это оно !

+0

Спасибо, Бенуа за ваш ответ. Хотя я согласен с вами в том, что единственное использование файлов заголовков в проекте VS, похоже, для облегчения их открытия, я думаю, что это, возможно, недостаток дизайна или, по крайней мере, неинтуитивный. Как я уже упоминал в предыдущем комментарии, я не уверен, что цель фильтра/папок подзаголовка состоит в том, чтобы не создавать отдельные пространства имен, которые имитируют детерминированные пути #include в исходном коде. Во всяком случае, я ценю вашу помощь, помогая мне понять парадигму развития ВС. – Travis

1

Прежде всего, вы создали новый проект C/C++? Если это так, он должен создать каталог в выбранном вами месте. Как только это будет сделано, вы можете щелкнуть правой кнопкой мыши по проекту (в окне решения в MSVS) и добавить новый файл в свой проект. Например, вы можете добавить в проект исходный файл (.cpp) и файл заголовка (.h). Как только это будет сделано, вы должны написать #include "yourfile.h" в исходном файле, чтобы включить заголовочный файл в исходный файл. Обратите внимание, что вы можете добавлять новые файлы и существующие файлы. Надеюсь, это поможет!

+0

Да, я создал проект C/C++, но сделал это, используя «существующий мастер кода». Я пытался получить стороннюю базу с открытым исходным кодом для компиляции под окнами. Моя цель состояла в том, чтобы НЕ менять какой-либо исходный код, поскольку эта база кода уже скомпилирована под Linux и MacOS. Таким образом, я действительно не хотел менять инструкции #include. Спасибо за ваш ответ. – Travis

+0

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

3

Файлы проекта используются IDE для отслеживания ваших файлов, но компилятор не имеет доступа к этой информации. Путь include-файла передается в каждый исходный файл при компиляции.

+0

Хотя в вопросе используется фраза «рассказать компилятору», это довольно ясно из контекста, который он имеет в настройках проекта IDE. Это не редкость (даже если это неточно, строго говоря), чтобы вызвать IDE «компилятор». –

+0

Да, спасибо, я говорил о IDE. В качестве интегрированной среды разработки я предположил, что она будет интегрировать файлы проекта с компилятором, чтобы детали обработки командной строки были в значительной степени абстрагированы. Теперь я понимаю, что IDE в некотором роде скорее более тонкий шпон над компилятором, чем тот, который я впервые ожидал. Спасибо, что ответили. – Travis

3

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

Все, что сказало (и это просто предположение), я думаю, что вы хотите получить разумную просьбу (это то, что раньше вызывало у меня небольшое разочарование) - по крайней мере, в качестве варианта или по просьбе.

+0

Как вы говорите, это не серьезная проблема, когда правильные настройки реализованы. Я только упоминаю об этом, потому что это похоже на такое легкое и интуитивное поведение для реализации IDE. Если разработчик встает на пути добавления файлов в проект, IDE, на мой взгляд, должен учитывать их для любых операторов #include. Я заметил, что IDE позволяет создавать папки подзаголовков (я думаю, что они называют их «фильтры»?), Чтобы настроить имидж структуры каталога, ожидаемый исходным кодом. Зачем это делать, если полный путь должен быть указан в свойствах проекта? Во всяком случае, спасибо за ваш ответ. – Travis

0

Я никогда не видел эту проблему.как только вы создали проект и добавили в проект IDE один и тот же заголовочный файл в IDE, вы можете добавить заголовочный файл с помощью #include и скомпилировать исходный код. , если желаемый файл заголовка не существует в той же папке, что и ваш проект, u должен добавить каталог заголовка в свойствах проекта, как вы сказали :)

Смежные вопросы