Стандартный способ включить файлы локальной библиотеки в проект C ++ - PullRequest
0 голосов
/ 16 марта 2020

Так что я становлюсь большим мальчиком и делю свой проект на отдельные исходные файлы.

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь соответствовать стандартам, но должно быть что-то что я пропустил, потому что у меня есть эта проблема:

В моем каталоге проекта есть несколько подкаталогов:

include
lib
...
sr c

Кажется, не рекомендуется иметь #include "include/some_file.h", что кажется достаточно справедливым. Насколько я понимаю, нормальная установка состоит в том, чтобы установить папку include в качестве относительного каталога, чтобы во время любой компиляции файла в исходном коде, если компилятор считывал #include "cat/dog.h", он фактически искал файл в include / cat / dog.h .

Моя проблема возникает тогда, когда я хочу включить файл из моей библиотеки, lib . Кажется, я должен использовать #include "../lib/my_library/giraffe.h", но я знаю, что использование относительного пути включает в себя fr agile, и это не рекомендуется.

Я знаю, что библиотечные файлы обычно должны быть предварительно скомпилированы, и что я могу включите их с флагами компиляции (и аналогичными методами в IDE, например VS), что означает, что он все равно будет компилироваться, даже если я никогда не напишу #include "../lib/my_library/giraffe.h" и смогу использовать содержимое файла. Но я также знаю, что хорошо писать #include файла всякий раз, когда вы непосредственно используете его в заголовке / cpp.

Извинения за вопрос noob, но как мне примирить это на первый взгляд? противоречивые стандарты?

1 Ответ

2 голосов
/ 16 марта 2020

[Спасибо JaMiT и Карлу, которые ответили в комментариях. Я пишу здесь, чтобы другие знали, что на вопрос дан ответ.

В качестве относительных каталогов можно указать как путь include, так и путь lib, поэтому, когда прекомпилятор читает #include "my_library/giraffe.h" сначала проверяет один из относительных путей, если не может найти файл, затем проверяет следующий, и т. Д. c.

В g cc это выглядит так: g++ src/file.cpp -I include -I lib

...