2015-03-02 1 views
2

У меня есть папка под названием code/, в этой папке у меня есть папка с именем include/ и исходный файл с именем code.cc, то include/ содержит файлы заголовков a.h, b.h, и эти два заголовка файлы также существуют где-то еще, чтобы использовать файлы заголовков в папке include/, я добавил флаг -Iinclude в свой Makefile, но мой код все еще использует эти файлы заголовков в других местах, если я включаю заголовочные файлы ниже, мой код использует файлы заголовков под include/, почему флаг -I не меняет каталог включения?НКУ -I не меняет включать каталог

#include "include/a.h" 
#include "include/b.h" 

Edit: Каталог:

code/code.cc 
code/Makefile 
code/include/a.h 
code/include/b.h 

Makefile:

CFLAGS = -Iinclude/ 
CFLAGS += -m32 
LDFLAGS = -Llib -llits -lrt -lpthread -Wl,-R,'lib' 
code:code.cc 
    gcc -o code $(CFLAGS) $(LDFLAGS) code.cc 

НКУ --version:

gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] 
Copyright (C) 2008 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+0

Где находится 'Makefile'? Это под кодом? Вы запускаете 'make' из' code'?Это не ясно из вашего вопроса. – lurker

+0

@lurker Makefile находится под 'кодом'. – user4016367

+0

Где также существуют файлы 'a.h' и' b.h' *? У вас есть эта папка в INCLUDE_PATH? –

ответ

1

С помощью этой установки:

code/code.cc 
code/Makefile 
code/include/a.h 
code/include/b.h 

И путем добавления -Iinclude/ к флагам компилятора, ваш #include "include/a.h" будет искать include/a.h в папке include/ первым. то есть компилятор ищет include/include/a.h, который не существует, и компилятор ищет файл include/a.h в другом месте пути поиска.

Ваш код должен либо использовать #include "a.h", либо ваш -Iinclude/ должен быть -I. -I. добавляет текущий каталог к ​​пути поиска, так что #include "include/a.h" будет соответствовать файлу ./include/a.h Убедитесь, что перед любыми другими путями поиска добавлен -I., который также будет соответствовать вашим включенным файлам.

0

Порядок -I реж важны экстенты до gcc. Директива -I, которая добавляет «эти файлы заголовков в других местах», должна быть до -Iinclude для /include.

0

Вы должны использовать

CFLAGS = -I<full_path_to_project>/code 

если include находится ниже этого каталога, и вы включаете файлы относительно нее, как в вашем включают заявление

#include "include/a.h" 
     // ^^^^^^^^^ 

Если вы задаете

CFLAGS = -I<full_path_to_project>/code/include 

Вам не нужно указывать относительные пути включения

#include "a.h" 

Относительные тракты, указанные с -I начнется с рабочего каталога, используемого make. Если оттуда отсутствует относительная часть пути, вы опускаете опцию -I или указываете -I./.

+0

Мой файл Makefile находится под 'code /', в этом случае я должен CLFAG быть только '-I'? – user4016367

+0

@ user4016367 _ «Мой Makefile находится под кодом /» _ В этом случае вам вообще не нужен параметр «-I». –

+0

@ user4016367 Вы часто задаете очень простые, низкокачественные вопросы о SO. StackOverflow на самом деле не является местом для изучения языка программирования или инструмента, вы должны быть знакомы с основами уже при запросе здесь. Поэтому сначала изучите руководства по документации. Также вы можете снова прочитать [эти статьи] (http://stackoverflow.com/help/asking) из раздела справки. С наилучшими пожеланиями. –

 Смежные вопросы

  • Нет связанных вопросов^_^