我的项目可以简化为以下结构。
--+ 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
的{{1}}中
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
目标吗?谢谢。
答案 0 :(得分:0)
最后,我在这里有一个解决方案(也许看起来很尴尬)。
事实证明(如我在问题中提到的那样),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)
对两个目录都适用。如果任何一个模块需要隔离测试,只需使用宏即可避免包含另一个模块的代码。