我最近遇到这个问题:
我想在我的项目中使用antlr4做语法分析,而我的项目中使用的语言是C++,我需要编译链接antlr-runtime,为了满足多平台的需求,我选择从源码,把antlr-runtime放到third_party目录下
所以在 CMakelists 中部分源代码如下所示:
add_subdirectory(third_party)
add_subdirectory(src)
add_subdirectory(test)
我想要的结果是在third_party中编译antlr4-runtime库并链接到src中:
find_library(ANTLR4_LIB_PATH antlr4-runtime PATHS ${CMAKE_BINARY_DIR}/lib NO_DEFAULT_PATH)
target_link_libraries(parser_obj ${ANTLR4_LIB_PATH})
但结果,如果我尝试编译,就会遇到问题:
ld: library 'ANTLR4_LIB_PATH-NOTFOUND' not found
但是我发现/build/lib目录下已经有库文件了,所以可以进行第二次编译。有没有办法确保antlr4在
find_library
之前编译?或者确保它以正确的顺序编译?
我尝试编译和构建我的项目的代码,但这需要编译两次才能成功。第一个失败是因为找不到antlr4-current库文件,第二个可以编译成功
我建议你检查你的third_party子目录中的cmakelists,其中有“add_library”之类的东西。 也许设置配置并使用“find_package”获取更多信息。