让 CMake 在 Windows 上找到 flex

2023-11-27

我正在尝试在项目中使用 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 二进制文件而不是库?任何帮助,将不胜感激。

Thanks


我知道问题出在哪里了。在 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")

第一行将 .a 添加到搜索库的后缀列表,第二行查找 libfl。那行得通

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 CMake 在 Windows 上找到 flex 的相关文章

随机推荐

  • 应用程序启动器图标更改为 Oreo 上的默认图标

    我创建了一个带有自己的启动器图标的 Android 应用程序 它与牛轧糖配合得很好 但在 Oreo 中 我的图标被默认的 Android 图标取代 我已经定义了ic launcher png and ic launcher round pn
  • AutoMapper 与 ValueInjecter [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • 将音频 MMS:// 流式传输到 iPhone

    我想直播mms url我的 iPhone 应用程序 但到目前为止 很难获得有关该主题的信息 我知道有几个应用程序已经可以做到这一点 FStream WunderRadio Tuner 并且我已经阅读了一些关于它们可能使用 libmms 和
  • 模板类C++

    我尝试为我的大学项目设计一个模板 我写了以下代码 ifndef LinkedList H define LinkedList H include Link h include
  • C++ 中的扩展方法

    我正在寻找 C 中扩展方法的实现 并发现了这个 comp std c 讨论其中提到polymorphic map可以用于将方法与类相关联 但是 提供的链接似乎已失效 有谁知道这个答案指的是什么 或者是否有另一种方法以与扩展方法类似的方式扩展
  • 乔恩·斯基特 (Jon Skeet) 的 Singleton 澄清

    public sealed class Singleton Singleton public static Singleton Instance get return Nested instance class Nested Explici
  • 等效的隐式运算符:为什么它们是合法的?

    Update 请参阅下面我对 C 规范的一部分的剖析 我想我一定错过了一些东西 因为me看起来我在这个问题中描述的行为实际上违反了规范 更新2 好吧 经过进一步思考 并根据一些评论 我想我现在明白发生了什么 规范中的 源类型 一词指的是正在
  • 迭代器上的 Scala 映射不会产生副作用

    为什么会这样 scala gt List 1 2 3 4 iterator map x Int gt println x 不打印出来 1 2 3 4 while List 1 2 3 4 map x Int gt println x Lis
  • 如何将系统麦克风音频流传输到连接设备麦克风音频流

    I am trying to attach USB device used for tele calling which have pnp sound controller for mic and speaker Now i have tw
  • Spring Boot with Security OAuth2 - 如何通过 Web 登录表单使用资源服务器?

    I have 春季启动 1 2 1 RELEASE 服务的应用程序OAuth2 2 0 6 RELEASE 授权和资源服务器位于一个应用程序实例中 它使用自定义UserDetailsService实现利用MongoTemplate在 Mon
  • Pandas:列的指数平滑函数

    我有以下包含交易数据的 DataFrame df pd DataFrame Trader Carl Mark Carl Joe Mark Carl Max Max split Quantity 5 2 5 10 1 5 2 1 Date D
  • Javascript 和反斜杠替换

    这是我的字符串 var str This is my string 这是我的代码 var replaced str replace 我无法让我的输出为 This is my string 我已经尝试了我能想到的正则表达式和替换值的所有组合
  • 在meteor.js 中处理发布数据的简单方法?

    我需要在我的meteor js 应用程序中处理一些POST 数据 有没有一种简单的方法可以做到这一点 非常基本 如果它是一个 PHP 应用程序 我只需要 POST 变量 流星路由器 https github com tmeasday met
  • 如何确定 Apache 运行时的用户和组?

    在 DreamHost 共享主机上 我正在设置 htpasswd 但 Apache 无权读取该文件 我如何授予它权限 我想更改所有者或组 htpasswd文件而不是授予它不安全的权限 我认为我无权访问httpd conf文件 所以我不能使用
  • 将 ResourceProcessor 迁移到 HATEOAS 1.0.0 M1

    在我当前的 Spring HATEOAS 0 25 1 RELEASE 项目中 我大量使用资源处理器接口 Bean public ResourceProcessor
  • 使用 chunksize 迭代获取推断的数据帧类型

    如何使用 pd read csv 迭代地对文件进行分块并 保留数据类型和其他元信息 就像我阅读了整个内容一样 一次数据集 我需要读取太大而无法装入内存的数据集 我想使用 pd read csv 导入文件 然后立即将块附加到 HDFStore
  • JavaFX:设置文本控件的背景颜色

    我正在使用 TextFlow 和一些文本项来显示样式文本 但我找不到一种方法来设置简单的背景颜色Text items 我可以设置填充颜色和字体 但它没有设置其背景颜色的 java 方法或 css 属性 基于此solution 这是一种为所有
  • 如何在flutter中显示交付更新的进度条

    i wanna add a progress bar in my app but i dont know how to do this thing i just a beginer for flutter and wanna learn h
  • Nodejs中的AES 256 GCM加密解密

    我正在nodejs中实现一组基本的加密 解密函数 并且在解密部分不断收到以下错误 Error Unsupported state or unable to authenticate data 到目前为止 这是我的代码 import cryp
  • 让 CMake 在 Windows 上找到 flex

    我正在尝试在项目中使用 flex 并且我正在尝试使用 CMake 将 flex 与我的项目链接起来 我在网上找到了我正在使用的 FindFLEX cmake 你可以找到它here 默认情况下 这应该在 CMake 中 但我认为不是 我的目录