gpt4 book ai didi

c++ - CMake : Flex custom_command never called

转载 作者:行者123 更新时间:2023-11-30 03:49:39 25 4
gpt4 key购买 nike

我在 C++ 项目中将 CMake 与 Flex 结合使用时遇到一些问题。我使用 FindFlex 及其宏 FLEX_TARGET 生成一个自定义命令,该命令仅调用 Flex 可执行文件以从 .l 文件创建源文件。

See macro definition from Github Cmake project .

我的项目只包含 CMakeLists.txt 和我的 Example.l LEX 文件。还有一对文件,Parser.hpp/Parser.cpp,目前只包含一个“我什么都不做”类(构造函数,析构函数,仅此而已):

这是 CMakeLists.txt: cmake_minimum_required(版本 3.0)

project(PARSER)

find_package(FLEX REQUIRED)
flex_target(Scanner Example.l ${CMAKE_CURRENT_BINARY_DIR}/LexParser.cpp)

set(Parse_SRCS
Parse.cpp
${FLEX_Scanner_OUTPUTS}
)

set(Parse_INCS
Parse.hpp
)

add_executable(Parse ${Parse_INCS} ${Parse_SRCS})

target_include_directories(Parse PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_include_directories(Parse PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")

问题:Scanner 目标从未被调用

首先检查:

  • 当我输出 FLEX_FOUNDFLEX_EXECUTABLEFLEX_LIBRARIES 时,我看到模块已正确找到。
  • 我已经在 Linux 和 Windows 安装的 CMake 和 Flex 上进行了测试。但到处都是一样。
  • 内部自定义命令至少应输出一条消息,如“[FLEX][Scanner] 使用 flex 2.5.4 构建扫描仪”,证明自定义命令已执行,但未执行。我仍然没有错误。

谢谢!

最佳答案

函数flex_target ,有点误导,创建一个 custom command而不是 custom target .

自定义命令(与自定义目标不同)不会自行执行,而是必须与使用其输出的目标(或其他自定义命令)相关联。

您可以通过将函数写入 FLEX_Scanner_OUTPUTS 变量的 flex_target 的输出作为源文件添加到您的 Parse可执行文件。这将导致在构建可执行文件时生成该文件。

但请注意,自定义命令始终在构建时(例如,在运行 make 时)执行,而不是在运行 CMake 时执行。

关于c++ - CMake : Flex custom_command never called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372818/

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