如何编写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
相关产品推荐
相关产品推荐

