Используйте препроцессор gcc, чтобы определить имя файла для #include

Я хотел бы указать имя включаемого файла C во время компиляции в качестве флага C.

e.g.

#include MY_INCLUDE_FILE
int main(int argc, const char * argv[]) {...}

Будет расширен препроцессором до

#include "some_incfile.h"
int main(int argc, const char * argv[]) {...}

Делать что-то вроде этого

gcc -DMY_INCLUDE_FILE="some_incfile.h" main.c

Я попытался использовать строковый оператор # для расширения, но получил только такие ошибки, как error: expected "FILENAME" or <FILENAME>

Это вообще возможно? -D определить не совсем обязательно, важно то, что имя включаемого файла можно установить из командной строки gcc.

Идея хорошая, проблема в расширении оболочки кавычек   —  person bits    schedule 18.01.2017

См. также:  не удалось загрузить phonegap с github
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 3
  1. bits

    Вы должны избежать «:

    gcc -DMY_INCLUDE_FILE=\"some_incfile.h\" main.c
    

    Вот так просто… надо было, конечно, не забыть сбежать ". Это хорошо работает, и это то, о чем я просил, поэтому это принятый ответ. Ответ от anonymoose также решает мою проблему. person bits; 18.01.2017

  2. bits

    Используйте опцию -include.

    gcc -include "somefile.h" main.c
    

    Не совсем то, о чем я просил, но решает это так же хорошо, возможно, даже более элегантно. person bits; 18.01.2017

  3. bits

    Вы можете сделать это как-то так

    #  if defined AAA
    #define INC "x.h"
    #elif defined BBB
    #define INC "y.h"
    #endif
    
    #include INC
    

    а из командной строки делаешь gcc -DAAA.

    и, конечно, вы можете передать напрямую gcc -DINC="\"FILE.h\"", если файл действительно генерируется случайным образом извне, make-файлами и т. д.

    Важно, чтобы INC оценивалось как допустимое имя файла с помощью процедуры раскрытия макроса (см. алгоритм Проссера).

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: