cmake - CMake:如何在不同的子目录下指定 FLEX 和 BISON 目标
问题描述
我的项目可以简化为以下结构。
--+ project directory
+--+ flex (subdir)
| +-- CMakeLists.txt
| +-- xxx.l
|
+--+ bison (subdir)
| +-- CMakeLists.txt
| +-- xxx.y
|
+--- CMakeLists.txt
+--- other source files
现在我有单独CMakeLists.txt
的文件flex
和bison
子目录。
在CMakeLists.txt
我写的根目录中
add_subdirectory(flex)
add_subdirectory(bison)
在我写CMakeLists.txt
的里面flex
flex_target(lex ... )
在我写CMakeLists.txt
的目录中bison
bison_target(syntax ... )
add_flex_bison_dependency(lex syntax)
这lex
是flex_target
另一个目录中的目标flex
。CMake
给我看Flex target 'lex' does not exists.
。我想知道如何判断我在另一个目录中CMake
有一个先前定义和依赖的目标?flex
谢谢。
解决方案
最后我在这里找到了解决方案(也许看起来很尴尬)。
事实证明(正如我在问题中提到的)CMake 无法flex_target
在另一个子目录中识别。为了再次避免此错误,我尝试在该目录中明确声明另一个相同的目标。有用。
在子目录的CMakeLists.txt
文件中,我写道:flex
bison_target(syntax ${PROJECT_SOURCE_DIR}/bison/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c)
flex_target(lex scanner.l ${CMAKE_CURRENT_BINARY_DIR}/scanner.yy.c)
add_flex_bison_dependency(lex syntax)
在子目录的CMakeLists.txt
文件中,我写道:bison
bison_target(syntax parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c)
flex_target(lex ${PROJECT_SOURCE_DIR}/flex/scanner.l ${CMAKE_CURRENT_BINARY_DIR}/scanner.yy.c)
add_flex_bison_dependency(lex syntax)
这适用于两个目录。如果任一模块需要隔离测试,只需使用宏来避免包含来自另一个模块的代码。
推荐阅读
- arm - Arm Mali GPU 中的点积是否比 MAD(乘加)指令更快?
- html - 有没有办法检索网页的最终渲染像素值?
- java - Spring WebFlux 测试抛出“IllegalStateException: Failed to load ApplicationContext”异常
- java - 如何在不出现实例化异常的情况下将此超类更改为抽象类?
- node.js - 如何修复 Gatsby JS 上的错误 R10(引导超时)?
- r - 使用粘贴在 R 中循环以绘制图形
- python - 在numpy中将数组拼接在一起
- c# - WPF - ProgressBar 仅在进程完成之前更新
- angular - Angular - 在调试中上传照片,导致网站重新编译
- bots - 什么是 nbot,为什么它会抓取我的网站?