Как исключить определенные директивы #include из потока C ++? - PullRequest
1 голос
/ 15 июля 2010

У меня есть этот файл C ++ (назовем его main.cpp):

#include <string>
#include "main.y.c"
void f(const std::string& s) {
  yy_switch_to_buffer(yy_scan_string(s.c_str()));
  yyparse();
}

Файл зависит от main.y.c, который должен быть сгенерирован заранее с помощью bison util. Другими словами, я не могу скомпилировать файл main.c, если я забуду запустить bison main.y до него. И это нормально, я так хочу. Сейчас я пытаюсь собрать файл .d из Makefile, используя эту команду:

$ c++ -MM main.c > main.d
main.cpp:2:10: error: main.y.c: No such file or directory

Я терплю неудачу здесь, поскольку main.y.c еще не готов. Я думаю, что я должен как-то процитировать мою директиву #include в файле main.c, чтобы сделать ее невидимой для c++ -MM процесса.

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Это звучит как работа для make-файла. Вы можете установить зависимости таким образом, что main.c зависит от main.y.c, а main.y.c имеет правило для его построения из кода бизона.

1 голос
/ 15 июля 2010

Вы можете указать в своем make-файле, что main.c зависит от main.y.c, так что он запустит процесс bison до того, как попытается скомпилировать main.c.

В качестве альтернативы (что я думаю, вероятно, не то, что вы хотите сделать), вы можете сделать так, чтобы ваш make-файл передавал макрос компилятору, чтобы указать, существует ли main.y.c, и используйте директиву #if для включения (или нет) main.y.c.

#if EXISTS_MAIN_Y_C
#include "main.y.c"
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...