2013-06-11 2 views
3

Я беспокоюсь о следующем.Как переназначить файл заголовка c

У меня есть файл Foo.c

, что включает в себя foo.h и делает некоторые вещи.

Трудная вещь - это один. Я хотел бы переназначить foo.h на my_foo.h. Поэтому, когда компилятор видит foo.h, он должен перейти к my_foo.h.

Одна вещь, которая может работать, - включить my_foo.h в foo.h. Любые другие предложения? Нет, я не могу включить в foo.c my_foo.h

Спасибо всем заранее

+2

Почему бы не переименовать 'my_foo.h' или создать символическую ссылку? Что вы на самом деле пытаетесь сделать? – Beta

+1

Я был бы удивлен, если это возможно. Препроцессор (который обрабатывает это) довольно ограничен. – Kevin

+0

- это включить «foo.h» или включить (котировки или браки)? – Terminality

ответ

7

Alter включаемый путь использовать каталог, управляемый вами, прежде чем он использует каталог холдинг «foo.h»

В директории, управляемой вами, вы создаете символическую ссылку «foo.h», которая указывает на «my_foo.h» в качестве цели

2

В зависимости от того, какая система вы работаете, у вас могут не быть символических ссылок.

Но, может быть, вы можете создать foo.h со следующим содержанием:

#include "my_foo.h" 
1

Какой интересный вопрос. Мне бы хотелось узнать, что вы с ним делаете.

Итак, если у вас есть контроль над foo.h, вот вам вариация на трюк, который используется при совместном использовании файлов заголовков между кодом ядра и кодом пользователя в ядре Linux.

/* File: foo.h */ 
#ifdef USE_MY_FOO_H 
    #include <my_foo.h> 
#else 
    #define OVERRIDABLE_FOO_MACRO do { stuff() } while(0) 

    int overridable_foo_func(); 
#endif 

int not_overridable_foo_func(); 

Затем в Makefile

/* File: Makefile */ 
default: foo.c foo.h 
    $(CC) foo.c -o foo 

use_my_foo_h: foo.c foo.h my_foo.h 
    $(CC) -DUSE_MY_FOO_H foo.c -o foo 

BTW, это не очень хороший способ, чтобы сформировать свой Makefile, он просто показывает компилятор команд, которые можно использовать для переключения между двумя foo.h файлами ,

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