programa - los tres tipos de datos básicos en lenguaje c++ son
Agregar comillas al argumento en el preprocesador de C++ (4)
Me gustaría pasar el nombre de un archivo de inclusión como un argumento del compilador para poder modificar una gran cantidad de parámetros de configuración. Sin embargo, mi compilación de C ++ se realiza a través de un proceso similar a makefile que elimina las comillas de los argumentos pasados al compilador y al preprocesador. Esperaba hacer algo equivalente a
#ifndef FILE_ARG
// defaults
#else
#include "FILE_ARG"
#endif
con mi línea de comando incluyendo -DFILE_ARG = foo.h. Por supuesto, esto no funciona ya que el preprocesador no traduce FILE_ARG.
He intentado
#define QUOTE(x) #x
#include QUOTE(FILE_ARG)
que no funciona por la misma razón
Por razones de secuencias de comandos, prefiero hacer esto en la línea de comandos que ir y editar una línea de inclusión en la rutina apropiada. ¿Hay alguna manera?
Funciona para mi. Tal vez se le olvidó citar correctamente en su Makefile?
$ cat example.c #include FILE_ARG $ cat test.h #define SOMETHING $ gcc -Wall -Wextra -W -DFILE_ARG=/"test.h/" -c example.c $
EDITAR: la razón por la que no puede hacer que la cotización funcione es porque el preprocesador funciona en phases . Además, usé "gcc (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2", los resultados pueden variar entre los compiladores.
Para agregar citas necesitas este truco:
#define Q(x) #x
#define QUOTE(x) Q(x)
#ifdef FILE_ARG
#include QUOTE(FILE_ARG)
#endif
También puedes probar el interruptor -include.
gcc manual:
-incluir archivo
Procese el archivo como si #include "archivo" apareciera como la primera línea del archivo fuente principal. Sin embargo, el primer directorio buscado es el directorio de trabajo del preprocesador en lugar del directorio que contiene el archivo fuente principal. Si no se encuentra allí, se busca en el resto de la cadena de búsqueda #include "..." de manera normal. Si se dan varias opciones de inclusión, los archivos se incluyen en el orden en que aparecen en la línea de comandos. *
Tu puedes hacer
#ifdef FILE_ARG
#include FILE_ARG
#endif
En la linea de comando
$ gcc -DFILE_ARG="/"foo.h/"" ...
debe hacer el truco