2013-12-11 4 views
1

У меня есть набор из включает в себя, что находятся в версту каталоге это означает, что их включение требует долго включать, например:Препроцессор конкатенации для включают путь

#include "../../Path/to/my/file.h" 

Где у меня есть несколько из них становится немного неудобно, так что я имею в виду, я могу быть в состоянии использовать #define для пути каталога, а затем CONCAT имя файла, что мне нужно, т.е.

#define DIR "../../Path/to/my/" 
#define FILE1 "file.h" 
#define FILE2 "anotherFile.h" 

#include DIR FILE1 // should end up same as line in first example after pre-proc 

Однако это не работает ... есть в любом случае, чтобы сцепить в для этого подходит работа препроцессора C?

+1

Нет, препроцессор не имеет отражения или метапрограмм. –

ответ

4

Вы не можете настроить путь поиска для включения таких файлов, как этот, но вы можете указать компилятору, где искать включенные файлы. Многие компиляторы -I вариант для этого, например:

gcc -c stuff.c -I/path/to/my/ -I/path/to/other/ 

Если это делает ваша команда компиляции слишком долго, вы должны написать Makefile или, если вы работаете в Visual Studio или аналогичный IDE, настроить путь поиска в вашем проекте настройки.

2

Компилятор выполнит замену макросов на линии #include (за C 2011 [N1570] 6.10.2 4), но семантика не определена полностью и не может использоваться для конкатенации компонентов пути к файлу без дополнительной помощи из реализации C. Так что обо всем этом позволяет сделать некоторые простые подстановки, что обеспечивает полный путь, например:

#define MyPath "../../path/to/my/file.h" 
#include MyPath 

Что вы можете сделать с большинством компиляторов и операционных систем:

  • Скажите компилятору, что каталоги для поиска включенных файлов (как с коммутатором GCC).
  • Создайте символические ссылки на другие каталоги, так что #include "FancyStuff/file.h" будет эквивалентен ../../path/to/FancyStuff, потому что есть символическая ссылка с именем FancyStuff, которая указывает на более длинный путь.
Смежные вопросы