5

プロジェクトでフレックスを使用しようとしていますが、CMake を使用してフレックスをプロジェクトにリンクしようとしています。これに使用しているFindFLEX.cmakeをオンラインで見つけました。ここで見つけることができます。これはデフォルトでCMakeにあるはずでしたが、そうではなかったと思います。私のディレクトリ構造は次のとおりです

root
---src
   ---CMakeLists.txt
   ---cmake
      ---Modules
         ---FindFLEX.cmake
---build
---external
   ---flex - Where flex is installed
      ---bin
         ---flex.exe
      ---lib
         ---libfl.a

私の src/CMakeLists.txt は次のとおりです

cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
message(${CMAKE_MODULE_PATH})
set( project_name "try_flex" )
message(${project_name})
project(${project_name})
find_package(FLEX)
FLEX_TARGET(Mylexer tokenize.lex ${CMAKE_CURRENT_BINARY_DIR}/tokenize.cpp)
add_executable(${project_name} ${FLEX_Mylexer_OUTPUTS})
target_link_libraries(${project_name} ${FLEX_LIBRARIES})

FLEX_TARGET は、Flex パッケージが見つかったときに FindFLEX.cmake によって提供されるはずです。build/ ディレクトリで次のコマンドを実行しても、flex パッケージが見つかりませんでした

build> cmake ..\src

次に、プレフィックスを追加しましたが、部分的に機能しました

build> cmake -DCMAKE_PREFIX_PATH=c:\root\external\flex\ ..\src

実行可能ファイル flex.exe が見つかりましたが、ライブラリは見つかりませんでした。FindFLEX.cmake の関連部分を以下に示します。

FIND_PROGRAM(FLEX_EXECUTABLE flex DOC "path to the flex executable")
message("DEBUG:"${FLEX_EXECUTABLE})
MARK_AS_ADVANCED(FLEX_EXECUTABLE)

FIND_LIBRARY(FL_LIBRARY NAMES fl DOC "path to the fl library")
message("DEBUG:FL_LIBRARY"${FL_LIBRARY})
MARK_AS_ADVANCED(FL_LIBRARY)
SET(FLEX_LIBRARIES ${FL_LIBRARY})

cmakeの実行時に表示されるメッセージは

DEBUG:c:/root/external/flex/bin/flex.exe
DEBUG:FL_LIBRARYFL_LIBRARY-NOTFOUND
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake file s:FL_LIBRARY (ADVANCED)
linked by target "try_flex" in directory C:/root/src

-- Configuring incomplete, errors occurred!

プレフィックスパスを含めた後、フレックスバイナリを見つけたのにライブラリを見つけられなかった理由を誰か教えてもらえますか? どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1