Я не могу скомпилировать простой глупый демонстрационный «проект», используя код Visual Studio.
Поскольку я пытаюсь обогатить свой портфель знаний, я пытаюсь изучить основы вручную, так сказать, я пытаюсь скомпилировать код вручную, без этого Visual Studio Enterprise IDE делает все автоматически. Поэтому я решил использовать Visual Studio Code на Mac + clang++ для простого демонстрационного проекта.
Моя проблема: у меня есть рабочая область. В этом рабочем пространстве у меня есть несколько каталогов. Один из этих каталогов под названием «Функции и заголовки» снова содержит каталоги: отладка, выпуск, включение, src. В каталоге src
у меня есть файл functions.cpp
, содержащий два фиктивных метода:
int add(int x, int y)
{
return x + y;
}
int subtract(int x, int y)
{
return x - y;
}
и в main.cpp:
#include "functions.h"
int main()
{
int x = add(1, 3);
int y = subtract(5,1);
return 0;
}
В моей папке include
у меня есть два объявления метода:
int add(int x, int y);
int subtract(int x, int y);
Интересный момент: когда я нахожусь в main.cpp
и набираю #include "
, IntelliSense находит functions.h
и предлагает мне этот файл.
Также правильно подсвечиваются вызовы методов. Но: после включения файла код Visual Studio помечает файл как прочитанный и говорит: файл functions.h не найден.
Это ошибка Visual Studio Code? Потому что я также посмотрел настройки, и настройки вроде в порядке (см. рисунок).
Кланг пишет:
Ginos-MBP:src ginovalentinopensuni$ clang++ functions.cpp main.cpp main.cpp:2:10: fatal error: 'functions.h' file not found
#include "functions.h"
^~~~~~~~~~~~~ 1 error generated.
Я что-то упускаю или делаю что-то не так? Я также просмотрел другие подобные вопросы здесь, но ничего полезного не было.
Фотографий:
Конечно. Путь включения VSCode, позволяющий автозаполнение #include "functions.h"
, не имеет отношения к правильному пути к компилятору. Есть два способа решить эту проблему:
Поскольку вы включаете заголовок functions.h
из каталога ./src
, попробуйте вместо этого написать:
#include "../include/functions.h"
int main()
{
int x = add(1, 3);
int y = subtract(5,1);
return 0;
}
Это должно работать. Если компилятору не указан конкретный путь включения, clang++
, как и большинство других компиляторов C++, будет интерпретировать путь относительно расположения исходного файла. В этом случае ему нужно перейти в каталог вверх, а затем в каталог include
, чтобы найти заголовочный файл functions.h
.
clang++
Из чтения справочной страницы clang++
можно убедиться, что флаг -I
может использоваться для указания дополнительного пути включения, который компилятор должен искать для поиска файлов заголовков. Итак, если предположить, что команда была запущена из каталога ./
, один прыжок из каталога src
и корня проекта:
clang++ src/main.cpp -I./include
также решит поставленную задачу.