3

我试图找出在 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(就像我在这个 makefile 的正常的 pre-cmake 版本中所做的那样)

4

1 回答 1

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)
于 2012-12-18T03:57:03.743 回答