关于CMake和编译顺序的问题

问题描述 投票:0回答:1

我最近遇到这个问题:

我想在我的项目中使用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库文件,第二个可以编译成功

c++ cmake makefile antlr4
1个回答
0
投票

我建议你检查你的third_party子目录中的cmakelists,其中有“add_library”之类的东西。 也许设置配置并使用“find_package”获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.