Добавление кавычек в аргумент в препроцессоре C ++

Я хотел бы передать имя включаемого файла в качестве аргумента компилятора, чтобы я мог изменять большое количество параметров конфигурации. Однако моя сборка C ++ осуществляется с помощью процесса, подобного make-файлу, который удаляет кавычки из аргументов, передаваемых компилятору и препроцессору. Я надеялся сделать что-то эквивалентное

#ifndef FILE_ARG
// defaults
#else
#include "FILE_ARG"
#endif

с моей командной строкой, включая -DFILE_ARG = foo.h. Это, конечно, не работает, поскольку препроцессор не переводит FILE_ARG.

Я пробовал

#define QUOTE(x) #x
#include QUOTE(FILE_ARG)

, который не работает по той же причине.

Из соображений сценария я бы предпочел сделать это на командную строку, чем войдите и отредактируйте строку включения в соответствующей программе. Есть ли способ?

23
задан Brian Tompsett - 汤莱恩 22 June 2016 в 11:29
поделиться