Как установить приоритет конфликтующих заголовков c ++

Представьте, что у вас есть два something.h в двух разных каталогах. Вы не можете писать в эти каталоги и не иметь root-доступа.

У вас есть код, который делает:

#include 

Как вы определяете использование something.h в определенном каталоге и игнорируете другое?

3
nl ja de
бум! увеличено на 20%!
добавлено автор madreblu, источник

2 ответы

Как правило, список каталогов, которые имеют право на поиск того, что считается системой, включает (с использованием угловых скобок в #include), предоставляется как набор -I для компилятора. Часто они включают каталоги, указанные в make-файлах или файлах проекта.

Многие (но не обязательно все) компиляторы будут соблюдать порядок каталогов, перечисленных как включенные каталоги, поэтому вы должны быть в состоянии выбрать свое предпочтение, изменив этот порядок в своих файлах make-файлов. Однако в некоторых компиляторах это может быть сложно, так как некоторые каталоги считаются всегда включенными (например, gcc по умолчанию предполагает, что вы включили /usr/include ). Другими словами, это очень специфическая реализация.

Если вы используете не угловые скобки, а двойные кавычки, вы можете просто указать нужный файл прямо как #include "dir/file.h" .

1
добавлено
Одна версия находится в/usr/include/foo/... другая находится в моем домашнем каталоге. Когда я укажу с помощью #include "fullpath to home directory header" , он по-прежнему выбирает/usr/include one
добавлено автор madreblu, источник
Да, и даже с -I, он все еще смотрит на/usr/include/foo/one
добавлено автор madreblu, источник
никаких изменений, кроме того, нет инструкции перед добавлением в программу/usr/include/foo/header.
добавлено автор madreblu, источник
@madreblu Вы также попробовали вариант -I ?
добавлено автор πάντα ῥεῖ, источник
@madreblu: попробуйте использовать #include как самую первую строку в вашем .cpp-файле. В противном случае этот заголовок может быть затянут другим #include над ним
добавлено автор mvp, источник
вы должны рассказать больше о том, что происходит - очень сложно угадать, что вы видите. предполагая, что вы используете gcc, это официальный документ о порядке поиска: gcc.gnu. орг/onlinedocs/CPP/Поиск-Path.html
добавлено автор mvp, источник
Заметка о каталогах по умолчанию из документов, связанных каталогами mvp: -I , имеет приоритет над ними. Однако вы не можете изменить порядок каталогов по умолчанию, используя флаг -I . Вы должны либо использовать -nostdinc , чтобы игнорировать все значения по умолчанию, а затем -I их в том порядке, в котором вы хотите, или можете связать нужные заголовки с каталогом, отличным от по умолчанию, и использовать -I .
добавлено автор brian, источник

попробуйте использовать:
#include "../ directory/something.h"
Обратите внимание, что GCC ищет заголовки, используя путь поиска .
Вы также можете попросить GCC искать файлы заголовков в указанных каталогах. Используйте -iquote dir , чтобы добавить каталог dir в список списка каталогов для поиска файлов заголовков.

1
добавлено
ставя полный путь к .h, который я хочу, не работает.
добавлено автор madreblu, источник
попробуйте использовать -iquote
добавлено автор bane, источник
также см. это: Параметры каталога
добавлено автор bane, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest