automakeビルドシステムを使用したプロジェクトがあり、そこにflex/bisonファイルがあります。今、私はそれらをcmakeビルドシステムに含める方法を理解できません。私はこれを手動で行おうとしています。プロジェクトツリーは次のとおりです。
+ROOT
|---CMakeLists.txt
|---Sources/
| |---Flex
| |---Main
| |---CMakeLists.txt
|---Includes/
Flex
フォルダには2つのファイルがあります:player_command_parser.ypp; player_command_tok.lpp
。これらのファイルはRoboCupサッカーサーバーからのものです。
新しいビルドシステムでそれらを使用する方法がよくわからないので、すべてのファイルを手動で生成することにしました。
flex --c++ player_command_tok.lpp
このコマンドlex.RCSSPCom.cc
は、次のコードで始まるを生成します。
#line 3 "lex.RCSSPCom.cc"
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
/* The c++ scanner is a mess. The FlexLexer.h header file relies on the
* following macro. This is required in order to pass the c++-multiple-scanners
* test in the regression suite. We get reports that it breaks inheritance.
* We will address this in a future release of flex, or omit the C++ scanner
* altogether.
*/
#define yyFlexLexer RCSSPComFlexLexer
次のステップは次のとおりbison -d player_command_parser.ypp
です。
私が得た:player_command_parser.tab.cpp; player_command_parser.tab.hpp
今、私は生成されたすべてのファイルを関連するフォルダーにコピーしようとしています:*。tab.hpp->インクルード、およびcc&cppファイルを次の場所に追加しましたSources/CMakeLists.txt
:
set (FlexSources
Server/Flex/lex.RCSSPCom.cc
Server/Flex/player_command_parser.tab.cpp
)
そしてコンパイル出力:
[ 1%] Building CXX object Sources/Flex/lex.RCSSPCom.cc.o
In file included from /Includes/player_command_tok.h:31:0,
from player_command_tok.lpp:28:
/usr/include/FlexLexer.h:112:7: error: redefinition of ‘class RCSSPComFlexLexer’
/usr/include/FlexLexer.h:112:7: error: previous definition of ‘class RCSSPComFlexLexer’
何が間違っている可能性がありますか?