Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не понимаю как gcc ищет include-файлы

5.9K
21 июля 2006 года
assign
60 / / 13.12.2005
Здравствуйте.
у меня есть примерно такое дерево проекта:

~/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 это не относится? Или я чего-то не
догоняю?
2
21 июля 2006 года
squirL
5.6K / / 13.08.2003
указывай путь явно.
5.9K
21 июля 2006 года
assign
60 / / 13.12.2005
А "include/mac.h" - разве недостаточно явно?
Кстати вариант "./include/mac.h" точно также не работает.
3
22 июля 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=assign]Здравствуйте.
у меня есть примерно такое дерево проекта:

~/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
5.9K
23 июля 2006 года
assign
60 / / 13.12.2005
Ещё раз здравствуйте, здесь assign.
Извините, что ввёл вас в заблуждение: Просто движок форума удаляет лишние пробелы, поэтому дерево изобразилось не совсем корректно.
Давайте условимся, что в следующем абзаце символ '^' будет обозначать пробел, тогда дерево будет выглядеть так:

~/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" работает. Вопрос такой: а нельзя ли обойтись более короткой записью?
240
24 июля 2006 года
aks
2.5K / / 14.07.2006
ну попробуй в таком случае #inclide "../include/mac.h"
=))
Или действительно восользуйся опцией -I компилятора )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог