Не понимаю как gcc ищет include-файлы
у меня есть примерно такое дерево проекта:
~/prog/startup/include/
в каталоге startup содержатся файлы:
startup.c и vga.c
в include лежит один файл mac.h.
Я нахожусь в каталоге ~/prog и в файле startup/startup.c есть строка
вида #include "include/mac.h".
Далее я пишу команду: gcc -o startup.o -c startup/startup.c.
И на это GCC мне сообщает, что файла include/mac.h он не нашёл.
Насколько я знаю, любой компилятор C ищет include-файлы указанные
в кавычках в том каталоге который явно указан в директиве #include
или в текущем. Вопрос: А к GCC это не относится? Или я чего-то не
догоняю?
указывай путь явно.
Кстати вариант "./include/mac.h" точно также не работает.
у меня есть примерно такое дерево проекта:
~/prog/startup/include/
в каталоге startup содержатся файлы:
startup.c и vga.c
в include лежит один файл mac.h.
[color=red]Я нахожусь в каталоге ~/prog[/color] и в файле startup/startup.c есть строка
вида #include "include/mac.h".
Далее я пишу команду: gcc -o startup.o -c startup/startup.c.
И на это GCC мне сообщает, что файла include/mac.h он не нашёл.
Насколько я знаю, любой компилятор C ищет include-файлы указанные
в кавычках в том каталоге который явно указан в директиве #include
или в текущем. Вопрос: А к GCC это не относится? Или я чего-то не
догоняю?[/QUOTE]
Текущий каталог, как сам говоришь, ~/prog, значит надо либо сделать текущим каталогом ~/prog/startup, либо указывать #include "startup/include/mac.h", либо использовать ключ компиляции -I с соотв. параметром, т.е. -Istartup
Извините, что ввёл вас в заблуждение: Просто движок форума удаляет лишние пробелы, поэтому дерево изобразилось не совсем корректно.
Давайте условимся, что в следующем абзаце символ '^' будет обозначать пробел, тогда дерево будет выглядеть так:
~/prog/
|
+-startup/
|^|
|^+-vga.c
|^|
|^+-startup.c
|
+-include/
^|
^+-mac.h
Так вот: директива #include "include/mac.h" в файле startup.c не работает - говорит, что файл include/mac.h не найден. Однако вариант #include "/home/vova/prog/include/mac.h" работает. Вопрос такой: а нельзя ли обойтись более короткой записью?
=))
Или действительно восользуйся опцией -I компилятора )