gpt4 book ai didi

windows - 让 CMake 在 Windows 上找到 flex

转载 作者:可可西里 更新时间:2023-11-01 13:41:06 24 4
gpt4 key购买 nike

我正在尝试在一个项目上使用 flex,并且我正在尝试使用 CMake 将 flex 与我的项目链接起来。我在网上找到了一个我正在使用的 FindFLEX.cmake。你可以找到它 here .默认情况下,这应该在 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 应该由 FindFLEX.cmake 在找到 Flex 包时提供。在 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!

谁能告诉我为什么我在包含前缀路径后找到了 flex 二进制文件而不是库?任何帮助将不胜感激。

谢谢

最佳答案

我想出了问题所在。在 Windows 上,cmake 正在寻找 libfl.lib。但是 Flex 的 Windows 安装只提供了 libfl.a 所以我需要将这两行添加到我的 cmake

LIST(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".a")
FIND_LIBRARY(FL_LIBRARY NAMES libfl fl DOC "path to the fl library")

第一行ads .a to list of suffixes 搜索库,第二行查找libfl。成功了

关于windows - 让 CMake 在 Windows 上找到 flex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com