Как правильно указать пути #include в C ++, чтобы сделать вашу программу переносимой
Прочтите стандарт C ++ 11 n3337 и посмотрите это Ссылка на C ++ веб-сайт. Включенный заголовок может быть даже не каким-либо файлом на вашем компьютере (в принципе, это может быть некоторая база данных).
Если вы используете недавний G CC в качестве компилятора C ++, он имеет предварительно скомпилированные заголовки и средства оптимизации времени компоновки. Прочтите также документацию его препроцессора. Я рекомендую включить все предупреждения и отладочную информацию, поэтому используйте g++ -Wall -Wextra -g
.
. Если вы используете Microsoft VisualStudio в качестве компилятора, у него есть документация и предоставляется команда cl
с различные оптимизация объектов. Не забудьте включить предупреждения.
Вы можете рассмотреть возможность использования некоторого анализатора C ++ stati c, например Clang's или Frama-C ++ . Этот черновик отчета может быть актуальным и должен вас заинтересовать (по крайней мере, для справки).
Редактор исходного кода (либо VisualStudioCode , либо GNU emacs или vim или многие другие) и отладчик (например, GDB ) и систему контроля версий (например, git), которые вы используете, также имеют документацию. Пожалуйста, найдите время, чтобы прочитать их, и прочтите Как отлаживать небольшие программы .
Помните, что код C ++ может быть сгенерирован такими инструментами, как ANTLR или SWIG .
Предлагается подойти к вашей проблеме двояко: убедитесь, что правильные пути включения передаются командам компиляции (из вашей автоматизации сборки такой инструмент, как GNU make или ninja или meson ). Это то, что делает GNU autoconf .
Вы можете рассмотреть возможность использования autoconf
в своем программном проекте.
Я изменил названия всех # включить "header.h" в #include ".. \ include \ header.h".
Я считаю, что это была ошибка, и вы определенно захотите использовать косую черту, например #include "../include/header.h"
, если вам нужно перенести свой код позже на другие операционные системы (например, Linux, Android, MacOSX или некоторых других Unix). В большинстве операционных систем разделителем для каталогов является /
, и большинство компиляторов C ++ его принимают.
Изучение исходного кода Qt или POCO может быть вдохновляющим, и одна или обе эти библиотеки с открытым исходным кодом могут быть вам полезны. Они кроссплатформенные. Исходный код G CC и Clang также может быть интересен. Оба являются компиляторами C ++ с открытым исходным кодом, написанными в основном на C ++ (с некоторыми подходами к метапрограммированию , то есть некоторым сгенерированным кодом C ++).
См. Также this и это .