Каков точный порядок поиска включаемых файлов во время компиляции NVRTC?
Предположим, вы используете библиотеку NVRTC для компиляции ядра CUDA, а исходный код имеет следующие директивы:
#include "foo.h"
#include <bar.h>
Теперь, если бы это был GCC или NVCC, мы все знаем (вроде), где будут выполняться поиск включаемых файлов. Но с NVRTC все сложнее, так как способы указания включений разные: есть предварительное включение, есть включаемые "файлы" с ключом имени файла, которые передаются в виде исходных строк в памяти, есть рабочий каталог компилятора JIT и указаны пути через параметры компиляции, подобные argv JIT-компилятору. Но - существует меньше или совсем нет неявных путей, как при компиляции на стороне хоста (например, путь libstdC++ или libC++ для GCC / clang).
(Кроме того, я считаю, что документация NVRTC о добавлении путей включения немного неоднозначна в отношении влияния на порядок.)
Итак, чтобы понять это прямо:
- В каком порядке пути и не путь расположения, в которых включаемый файл
bar.h
ищется? - В каком порядке пути и не путь расположения, в которых включаемый файл
foo.h
ищется?