小编Mah*_*kar的帖子

让CMake在Windows上找到flex

我正在尝试在项目上使用flex,我正在尝试使用CMake将flex链接到我的项目.我在网上找到了一个FindFLEX.cmake,我正在使用它.你可以在这里找到它.这应该是默认的CMake,但我不认为是.我的目录结构如下

root
---src
   ---CMakeLists.txt
   ---cmake
      ---Modules
         ---FindFLEX.cmake
---build
---external
   ---flex - Where flex is installed
      ---bin
         ---flex.exe
      ---lib
         ---libfl.a
Run Code Online (Sandbox Code Playgroud)

我的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})
Run Code Online (Sandbox Code Playgroud)

FLEX_TARGET应该由FindFLEX.cmake在找到Flex包时提供.在build /目录中运行以下命令并没有找到flex包

build> cmake ..\src
Run Code Online (Sandbox Code Playgroud)

然后我添加了前缀,部分工作

build> cmake -DCMAKE_PREFIX_PATH=c:\root\external\flex\ ..\src
Run Code Online (Sandbox Code Playgroud)

那找到了可执行文件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})
Run Code Online (Sandbox Code Playgroud)

我在运行cmake时得到的消息是

DEBUG:c:/root/external/flex/bin/flex.exe
DEBUG:FL_LIBRARYFL_LIBRARY-NOTFOUND
CMake …
Run Code Online (Sandbox Code Playgroud)

windows cmake flex-lexer

5
推荐指数
1
解决办法
2836
查看次数

标签 统计

cmake ×1

flex-lexer ×1

windows ×1