我试图弄清楚当我在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中所做的那样)
答案 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)