如何在CMAKE中使用FLEX

时间:2012-12-17 17:40:52

标签: c cmake lex flex-lexer

我试图弄清楚当我在Cmake文件中使用flex来构建共享库时我做错了什么。

我基本上有以下

find_package(FLEX)
FLEX_TARGET(Test ../src/test.l ../src/test.c)
set(SRC_FILES mysource.c ${FLEX_Test_OUTPUTS})
add_libary(testlib ${SRC_FILES})
target_link_libraries(testlib crypto c ${FLEX_LIBRARIES})

这给我一个问题,说它找不到../ src / test.c

我怎么能确定Lex先跑?其次,我如何将我的-L和-d选项传递给lex(就像我在我的普通,pre-cmake版本的makefile中所做的那样)

1 个答案:

答案 0 :(得分:4)

为什么要将输出文件放在源目录中?

我建议使用${CMAKE_CURRENT_BINARY_DIR}

FLEX_TARGET(Test ../src/test.l ${CMAKE_CURRENT_BINARY_DIR}/../src/test.c)

至于

  

我怎么能确定Lex先跑?

你不需要这样做,CMake可以通过它自己来猜测这种依赖。我认为问题在于将源目录用于输出文件,或者在../src运行之前flex目录不存在。

  

其次,我如何将-L和-d选项传递给lex

在输出参数后列出它们:

FLEX_TARGET(Test ../src/test.l ${CMAKE_CURRENT_BINARY_DIR}/../src/test.c -L -d)