2012-05-10 2 views
1

Использование GCC под Windows, я хотел бы иметь возможность указать в командной строке gcc (или из файла с управляемым вручную makefile) имя определенного файла include, который будет включен в скомпилированный файл. Как я понимаю, в идеале файл исходный код будет содержать строки что-то вроде ...Как я могу указать файл include из командной строки GCC?

#include INCLUDEFILENAME 

... то имя файла указано на GCC в командной строке будет заменен на INCLUDEFILENAME текста.

Кажется, я могу приблизиться к достижению этой цели путем определения макроса с именем INCLUDEFILENAME на GCC в командной строке с помощью опции -D (например. -D INCLUDEFILENAME="C:\TestLib\Test1.h"), но когда текст файла получает подставляется в #include заявлении он не заключен в двойной кавычки и без них не распознается как файл, который должен быть включен. Конечно ...

#include "INCLUDEFILENAME" 

... не работает, как INCLUDEFILENAME становится строковым и не заменяются на значения макроса. Я пробовал другие способы указания двойных кавычек (\x22, \", "\"" и т. Д.), Но они, похоже, не работают на линии #include.

Мне известно о опции gcc -include, которая, по-видимому, может привести к включению файла без упоминания каким-либо образом в исходном файле, но я бы предпочел, чтобы исходный файл указывал, что файл include должен быть здесь, но это имя указано «извне» в исходный файл (в конечном счете, из make-файла).

Любые предложения о том, как я могу достичь этого, будут оценены.

ответ

0

Вы должны включать в себя двойные кавычки " как часть определения (или <>, в зависимости от обстоятельств может быть):

% cat test.c 

#include <stdio.h> 
#include OTHERFILE 

int main() { printf("%s\n", func()); } 

% cat func.c 

char *func() { return "It worked."; } 

% gcc test.c -DOTHERFILE='"func.c"' 
% ./a.out 
It worked. 
% 
0

Вы можете использовать некрасивый, но классический stringification трюк:

#define STRINGIFY2(x) #x 
#define STRINGIFY(x) STRINGIFY2(x) 
#include STRINGIFY(INCLUDEFILENAME)