You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写CMakeLists.txt处理flex生成的calc.c与test.c文件

修正后的CMakeLists.txt配置方案

你的现有配置存在两个关键问题:

  • 错误引用了不存在的calc_lex.c文件,而你通过FLEX_TARGET指定生成的是calc.c
  • 未将用于调用的test.c加入可执行文件的源文件列表中

以下是正确的CMakeLists.txt配置,同时优化了路径引用的可靠性:

cmake_minimum_required(VERSION 3.5)
project(calc) 

# 查找Flex工具
find_package(FLEX REQUIRED)

# 使用Flex处理calc.l,生成对应的C文件
# 省略输出文件名时,CMake会自动在构建目录管理生成文件,通过${FLEX_calc_lexer_OUTPUTS}获取
FLEX_TARGET(calc_lexer calc.l)

# 包含当前源码目录,确保能找到token.h头文件
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

# 构建可执行文件:包含业务代码test.c和Flex生成的词法分析文件
add_executable(calc test.c ${FLEX_calc_lexer_OUTPUTS})

# 链接Flex运行时所需库(部分平台如Linux需要此步骤)
target_link_libraries(calc ${FLEX_LIBRARIES})

关键配置说明

  • FLEX_TARGET(calc_lexer calc.l):使用CMake自动管理生成文件路径,通过${FLEX_calc_lexer_OUTPUTS}变量安全引用,避免硬编码路径出错。
  • add_executable(calc test.c ${FLEX_calc_lexer_OUTPUTS}):将你的业务代码test.c和Flex生成的词法分析器文件一同加入可执行文件构建流程。
  • target_link_libraries(calc ${FLEX_LIBRARIES}):确保链接Flex运行时依赖库,避免部分平台出现链接失败问题。

如果需要手动指定生成的calc.c文件名,可修改为如下写法:

FLEX_TARGET(calc_lexer calc.l ${PROJECT_BINARY_DIR}/calc.c)
add_executable(calc test.c ${PROJECT_BINARY_DIR}/calc.c)

内容的提问来源于stack exchange,提问作者yuhao luo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:12:40