Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global includes #261

Merged
merged 30 commits into from
Aug 6, 2024
Merged

Global includes #261

merged 30 commits into from
Aug 6, 2024

Conversation

InfiniteCoder01
Copy link
Contributor

Этот PR исполняет рекоммендацию из #258

@MihailRis MihailRis marked this pull request as ready for review July 23, 2024 20:18
@MihailRis
Copy link
Owner

PR заброшен?

@InfiniteCoder01
Copy link
Contributor Author

#262?

@MihailRis
Copy link
Owner

#262 сделаю позже

@InfiniteCoder01
Copy link
Contributor Author

Хорошо. Займусь этим в ближайшие пару дней

1 similar comment
@InfiniteCoder01
Copy link
Contributor Author

Хорошо. Займусь этим в ближайшие пару дней

@InfiniteCoder01 InfiniteCoder01 marked this pull request as ready for review August 5, 2024 21:20
@InfiniteCoder01
Copy link
Contributor Author

Просьба посмотреть. Особенно обратить внимание на коммиты с названием "Controversial". Просьба ответить перед следующим коммитом, исправляющим ошибки из PVS Studio :)

@MihailRis
Copy link
Owner

MihailRis commented Aug 5, 2024

Кстати, почему выбраны угловые скобки, что заставляет компилятор сначала искать в системных либах, а не ковычки, с которыми он будет искать в путях проекта?
(с ними тоже работают глобальные include, так ещё и не возникают конфликты с системными либами)

@MihailRis MihailRis linked an issue Aug 5, 2024 that may be closed by this pull request
@InfiniteCoder01
Copy link
Contributor Author

InfiniteCoder01 commented Aug 6, 2024

Как говорится здесь, #include "somefile" будет искать сначала в текущей деректории, а потом в путях подключаемых файлов. #include <somefile> же будет сразу искать в путях подключаемых файлов. Например,
#include "header.h" в src/logic/logic.h будет искать в первую очередь в src/logic, потом в путях библиотек, включая src, т. к. target_include_directories добовляет файл в пути поиска (обычно доходит до компилятора через опцию -I)

@MihailRis
Copy link
Owner

То есть для проектных файлов больше подходит вариант с #include "somefile"

@InfiniteCoder01
Copy link
Contributor Author

Я бы сказал, нет, т.к. он дополнительно ищет в текущей директории
Например #include <scripting/scripting.hpp> в любом файле в папке logic работать не будет
А #include "iostream" будет работать

@MihailRis
Copy link
Owner

Так если в текущей директории есть такой файл, значит ожидается использование именно его.
А вот если у пользователя название библиотеки совпадет с каким-то пакетом проекта, там уже могут возникнуть реальные трудности, когда include <...> будет цеплять именно библиотечные хедеры, а не проектные

@InfiniteCoder01
Copy link
Contributor Author

InfiniteCoder01 commented Aug 6, 2024

Так если в текущей директории есть такой файл, значит ожидается использование именно его.

Именно по этому, те #include, которые подключают файлы в текущей директории (или по относительному пути) используют кавычки

А вот если у пользователя название библиотеки совпадет с каким-то пакетом проекта, там уже могут возникнуть реальные трудности, когда include <...> будет цеплять именно библиотечные хедеры, а не проектные

#include "..." тоже цепляет библиотечные хедеры

@MihailRis
Copy link
Owner

#include "..." тоже цепляет библиотечные хедеры

#include "..." отдаст предпочтение проектному
#include <...> библиотечному

@InfiniteCoder01
Copy link
Contributor Author

Цитирую:

Both user and system header files are included using the preprocessing directive ‘#include’. It has two variants:

#include

This variant is used for system header files. It searches for a file named file in a standard list of system directories. You can prepend directories to this list with the -I option (see [Invocation](https://gcc.gnu.org/onlinedocs/cpp/Invocation.html)).

#include "file"

This variant is used for header files of your own program. It searches for a file named file first in the directory containing the current file, then in the quote directories and then the same directories used for <file>. You can prepend directories to the list of quote directories with the -iquote option.

Смысл в том, что оба варианта ищют в списке подключаемых путей. target_include_directories добавляет папку в этот список. Различие только в том, что перед этим #include "path" попробует подключить path как относительный путь (относительный - от текущего файла)

@MihailRis
Copy link
Owner

В любом случае, можно поменять за пару минут

@MihailRis MihailRis merged commit ab3df5b into MihailRis:main Aug 6, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

#include <settings.hpp>
2 participants