Je possède ce fichier C++ (appelons-le main.cpp
):Comment exclure certaines directives #include du flux C++?
#include <string>
#include "main.y.c"
void f(const std::string& s) {
yy_switch_to_buffer(yy_scan_string(s.c_str()));
yyparse();
}
Le fichier dépend de main.y.c
, qui doit être généré à l'avance au moyen de bison
util. En d'autres termes, je ne peux pas compiler le fichier main.c
si j'oublie de lancer bison main.y
avant. Et c'est parfaitement OK, c'est comme ça que je le veux. Maintenant, je suis en train de construire à partir Makefile
fichier .d
, en utilisant cette commande:
$ c++ -MM main.c > main.d
main.cpp:2:10: error: main.y.c: No such file or directory
Je ne ici, puisque main.y.c
est pas encore prêt. Je pense que je devrais en quelque sorte citer ma directive #include
dans le fichier main.c
pour le rendre invisible pour le processus c++ -MM
.
Je ne connais pas beaucoup 'bison' donc ma question pourrait être stupide mais ... y compris un fichier' .c' semble faux. Est-ce vraiment le moyen de travailler avec 'bison'? N'avez-vous pas un fichier '.h' équivalent? – ereOn
Oui, c'est comme ça que bison fonctionne si vous avez besoin de placer son résultat dans un autre fichier C++. De par sa nature, le bison est pour C, pas pour C++. Ainsi, c'est un truc pour le faire fonctionner dans le projet C++. Au moins, je comprends de cette façon .. – yegor256
En fait, je peux inclure le fichier '.h', mais ce fichier est également généré automatiquement par' bison' .. Donc, le remplacement de '.c' par' .h' ne résoudra pas le problème – yegor256