CMake:Flex custom_command 从未调用过

CMake : Flex custom_command never called

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

See macro definition from Github Cmake project.

我的项目只包含 CMakeLists.txt 和我的 Example.l LEX 文件。还有一对文件,Parser.hpp/Parser.cpp,目前只包含一个"I do nothing" class(构造函数,析构函数,仅此而已):

这是 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_target, somewhat misleadingly, creates a custom command and not a custom target.

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

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

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