compilar - gcc linux install
¿Cómo puedo especificar un archivo de inclusión desde la línea de comandos de GCC? (2)
Utilizando GCC en Windows, me gustaría poder especificar en la línea de comando gcc (o desde un archivo MAKE administrado manualmente) el nombre de un archivo de inclusión específico para ser incluido en el archivo que se está compilando. Tal como lo veo, idealmente el archivo de código fuente contendría una línea algo así como ...
#include INCLUDEFILENAME
... entonces un nombre de archivo especificado en la línea de comando gcc sería sustituido por el texto INCLUDEFILENAME
.
Parece que puedo acercarme a lograr esto al definir una macro llamada INCLUDEFILENAME en la línea de comando de gcc usando la opción -D
(por ejemplo, -D INCLUDEFILENAME="C:/TestLib/Test1.h"
) pero cuando el texto del nombre de archivo se sustituye en la declaración #include
no está entre comillas dobles, y sin estos no se reconoce como un archivo para ser incluido. Por supuesto…
#include "INCLUDEFILENAME"
... no funciona como INCLUDEFILENAME, se convierte en un literal de cadena y no se reemplaza por el valor de macro. He intentado otras formas de especificar las comillas dobles ( /x22
, /"
, "/""
, etc.) pero parece que no funcionan en la línea #include
.
-include
opción gcc- -include
que parece forzar la inclusión de un archivo sin que se mencione de ninguna manera en el archivo fuente, pero preferiría que el archivo fuente indique que se debe incluir un archivo include aquí, pero que su nombre se especifica "externamente" al archivo fuente (en última instancia, desde el archivo MAKE).
Cualquier sugerencia sobre cómo puedo lograr esto sería apreciada.
Debe incluir las comillas dobles "
como parte de la definición (o <>
, según sea el caso):
% 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.
%
Puedes usar el truco de stringificación feo pero clásico:
#define STRINGIFY2(x) #x
#define STRINGIFY(x) STRINGIFY2(x)
#include STRINGIFY(INCLUDEFILENAME)