Они имеют несколько разные цели, и я думаю, что нужно использовать осторожно.
Рассмотрим тот факт, что в случае -I
это было /pathto/opencv
. Возможно, вы предлагаете #include <opencv/cv.h>
, но вы никогда не напишите #include </pathto/opencv/cv.h>
. Для этого есть причина: вы ожидаете, что cv.h
- это всегда в каталоге с именем opencv
, потому что он всегда выпускается, тогда как pathto
- это именно то место, где находятся файлы этой библиотеки. был установлен на вашем компьютере (или в вашем дистрибутиве, что угодно).
Все, что может различаться в зависимости от того, где компилируется ваш код, должно быть в пути включения, чтобы его можно было настроить без изменения исходного кода. Все, что гарантированно будет одинаковым везде, где используется конкретный cv.h
, может появиться в источнике, но это не обязательно, поэтому нам нужно решить, хотим ли мы его там.
Как вы уже заметили, полезно иметь его в качестве устранения неоднозначности, особенно для файла с двухсимвольным именем, но если вы думаете, что кто-то может захотеть поместить cv.h
в другое место, тогда Вы должны оставить это. Это в значительной степени компромисс, который вы делаете - заголовок всегда должен быть в каталоге opencv
, но стоит ли вам полагаться на это как на гарантию, как на цену неоднозначности?